首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于RStudio中几个YES/ NO列的新列

基于RStudio中几个YES/ NO列的新列
EN

Stack Overflow用户
提问于 2020-02-17 17:40:15
回答 2查看 609关注 0票数 0

我对RStudio相当陌生,能够学习和解决这么多的问题,多亏了这个和类似的网站,非常感谢大家!然而,我没有能够解决以下问题,并尝试了几种类型的搜索和代码。

我在RStudio中有一个数据集,有1400个条目(病人)和68个列,没有缺少数据。

对于一些关于药物的数据,我想创建一些新的专栏,如“抗血栓药物是/否”和“心脏药物是/否”。这些应该是基于5-10列,要么给出是或否。如果任何一栏表示“是”,则新列应为“是”,否则“否”。我尝试了几个版本的“变异”,“如果其他”等,其中我也尝试使用“\”写“或”,但没有“运气”到目前为止。

我有几个例子,但没有一个是我真的太相信的。试错!这个方法是基于一个类似问题的解决方案,我也能解决这个问题。

代码语言:javascript
复制
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"))

(图像被移除)

任何帮助都非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-02-17 17:56:54

我没有您的数据,所以我无法进行测试,但有一个问题是,您使用赋值运算符=而不是相等条件运算符==

代码语言:javascript
复制
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首选项)。

代码语言:javascript
复制
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 .就像往常一样,这取决于。

票数 0
EN

Stack Overflow用户

发布于 2020-02-17 18:03:48

这是一个R基方法。第一次可复制数据。浏览一下你的数据,没有似乎比是更常见:

代码语言:javascript
复制
set.seed(42)
dta <- data.frame(matrix(sample(c("YES", rep("NO", 9)), 100, replace=TRUE), 20))

现在计算列X6:

代码语言:javascript
复制
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  NO
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60267804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档