if语句与NAs并使用其他列分配新列

时间:2015-02-01 17:04:36

标签: r

我有一个数据框(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的新人。我知道这是一个非常简单的问题,但我无法处理它。我会很高兴得到任何帮助。非常感谢。

1 个答案:

答案 0 :(得分:3)

如果条件是根据“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)]