【问题标题】:R: Add column with condition-check on three columns?R:在三列上添加带有条件检查的列?
【发布时间】:2011-09-27 07:32:29
【问题描述】:

我的df1如下:

df1 <- data.frame(A=c("a","b","c","d","e"), B=c("f","g","t","g","u"), C=c("M","NA","NA","NA","M"), D=c("A","NA","NA","NA","NA"), E=c("NA","NA","NA","NA","G"), G=c(1:5))

  A B  C  D  E G
1 a f  M  A NA 1
2 b g NA NA NA 2
3 c t NA NA NA 3
4 d g NA NA NA 4
5 e u  M NA  G 5

我想根据 C、D 和 E 列中的读数添加列。如果全部为 NA,我想将 X 添加到 H 列。如果其中任何一个不是 NA,我想将 YES 添加到 H 列. 结果如下:

  A B  C  D  E G H
1 a f  M  A NA 1 YES
2 b g NA NA NA 2 X
3 c t NA NA NA 3 X
4 d g NA NA NA 4 X
5 e u  M NA  G 5 YES

专家可以教我如何使用 R 有效地做到这一点吗?

【问题讨论】:

    标签: r conditional-statements


    【解决方案1】:
    transform(df1, H = ifelse(is.na(C) & is.na(D) & is.na(E), "X", "YES"))
    

    请注意,这仅在 NAs 实际编码为 NA 而不是字符串 "NA" 时才有效。

    有关这些功能的说明,请参阅 ?transform?ifelse。单个&amp; 运算符将向量操作数逐项配对,并对每对操作数进行布尔运算,返回一个逻辑向量。

    【讨论】:

      【解决方案2】:

      对于某些种类,这里是使用 apply 的替代解决方案,不需要在每一列上分别调用 is.na

      df1$H <- apply(df1[,3:5],1,function(x){if (!all(is.na(x))) "YES" else "X"})
      

      同样需要注意的是,丹尼尔注意到将缺失值编码为 NA 而不是 "NA"

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-06-30
        • 1970-01-01
        • 2022-01-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-16
        • 2018-01-10
        相关资源
        最近更新 更多