【问题标题】:if statement with NAs and assigning a new column by using other columns带有 NA 的 if 语句并使用其他列分配新列
【发布时间】:2015-02-01 17:04:36
【问题描述】:

我有一个数据框(df),其中包括 NA 和数值。 df 的示例如下:

col1 col2
8145 NA
8078 8156
NA   NA
8223 NA
8112 8003

df<-data.frame(col1=c(8145,8078,NA,8223,8112), col2=c(NA,8156,NA,NA,8003)) 

期望的输出是:

col1 col2 col3
8145 NA   8145
8078 8156 8156
NA   NA   NA
8223 NA   8223
8112 8003 8003

即,

  • 如果 col2 为 NA,则将 col1 的值赋给 col3;
  • 如果 col2 不为 NA,则将 col2 的值赋给 col3;
  • 如果 col1 和 col2 都是 NA,则将 NA 分配给 col3。

我是 R 新手。我知道这是一个非常简单的问题,但我无法处理。我会很高兴得到任何帮助。非常感谢。

【问题讨论】:

    标签: r


    【解决方案1】:

    如果条件是根据“col2”中的NA值替换元素

     indx <- is.na(df$col2)
     df$col3 <- ifelse(indx, df$col1, df$col2)
     df
     #  col1 col2 col3
     #1 8145   NA 8145
     #2 8078 8156 8156
     #3   NA   NA   NA
     #4 8223   NA 8223
     #5 8112 8003 8003
    

    或者

    df$col3 <- df$col2
    df$col3[indx] <- df$col1[indx]
    

    或者您可以使用行/列索引

    df$col3 <- df[cbind(seq_len(nrow(df)), (!is.na(df$col2))+1)] 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-06-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-22
      • 2018-02-27
      • 2021-11-24
      • 1970-01-01
      相关资源
      最近更新 更多