我对RStudio相当陌生,能够学习和解决这么多的问题,多亏了这个和类似的网站,非常感谢大家!然而,我没有能够解决以下问题,并尝试了几种类型的搜索和代码。
我在RStudio中有一个数据集,有1400个条目(病人)和68个列,没有缺少数据。
对于一些关于药物的数据,我想创建一些新的专栏,如“抗血栓药物是/否”和“心脏药物是/否”。这些应该是基于5-10列,要么给出是或否。如果任何一栏表示“是”,则新列应为“是”,否则“否”。我尝试了几个版本的“变异”,“如果其他”等,其中我也尝试使用“\”写“或”,但没有“运气”到目前为止。
我有几个例子,但没有一个是我真的太相信的。试错!这个方法是基于一个类似问题的解决方案,我也能解决这个问题。
hipfx_master60 <- hipfx_master60 %>%
mutate(cardiac_HBP_antithromb_med = case_when({Diuretika="YES"|Betablokkere="YES"|Cakanalblokkere="YES"|ACEhaemmere="YES"|ATIIinhibitorer="YES"|Antithrombotica="YES"|Thrombocythammere="YES"|Vitamin_K_antagonister="YES"|Digoxin="YES"|Organiske_nitrater="YES"} ~ "YES", TRUE ~ "NO"))(图像被移除)
任何帮助都非常感谢!
发布于 2020-02-17 17:56:54
我没有您的数据,所以我无法进行测试,但有一个问题是,您使用赋值运算符=而不是相等条件运算符==。
hipfx_master60 <- hipfx_master60 %>%
mutate(
cardiac_HBP_antithromb_med = case_when(
Diuretika == "YES" | Betablokkere == "YES" | Cakanalblokkere == "YES" |
ACEhaemmere == "YES" | ATIIinhibitorer == "YES" | Antithrombotica == "YES" |
Thrombocythammere == "YES" | Vitamin_K_antagonister == "YES" |
Digoxin == "YES" | Organiske_nitrater == "YES" ~ "YES",
TRUE ~ "NO"
)
)在这种情况下,从长远来看,case_when将效率低下(大的ish数据?)原因是它是一行行地做着所有的条件。您可以使用if_else将其矢量化(一个常见的R首选项)。
hipfx_master60 <- hipfx_master60 %>%
mutate(
cardiac_HBP_antithromb_med = if_else(
Diuretika == "YES" | Betablokkere == "YES" | Cakanalblokkere == "YES" |
ACEhaemmere == "YES" | ATIIinhibitorer == "YES" | Antithrombotica == "YES" |
Thrombocythammere == "YES" | Vitamin_K_antagonister == "YES" |
Digoxin == "YES" | Organiske_nitrater == "YES",
"YES", "NO")
)当您有多个这样的检查时,我建议使用case_when,否则会嵌套if_else语句。经过一次嵌套之后,我发现代码很难看到和维护,并切换到case_when。(对于不大型数据集,性能损失主要在我的脑海中。)但即使速度较慢,可读性和可维护性也是首选。)可能还有其他“优雅”的方法来处理多个相关的条件而不诉诸嵌套嵌套的if_else .就像往常一样,这取决于。
发布于 2020-02-17 18:03:48
这是一个R基方法。第一次可复制数据。浏览一下你的数据,没有似乎比是更常见:
set.seed(42)
dta <- data.frame(matrix(sample(c("YES", rep("NO", 9)), 100, replace=TRUE), 20))现在计算列X6:
dta$X6 <- apply(dta[, c("X1", "X3", "X5")], 1, function(x) any(x=="YES"))
dta$X6 <- ifelse(dta$X6=="TRUE", "YES", "NO")
head(dta)
# X1 X2 X3 X4 X5 X6
# 1 YES NO NO NO YES YES
# 2 NO NO NO NO NO NO
# 3 YES NO NO NO NO YES
# 4 NO NO NO NO NO NO
# 5 NO NO NO YES NO NO
# 6 NO NO NO YES NO NOhttps://stackoverflow.com/questions/60267804
复制相似问题