R - 合并两列以消除NA条目

时间:2015-04-20 06:24:32

标签: r

我有两列数据,包括数字和NA条目。没有行,其中两列都具有NA作为该行的条目,但是列都具有NA作为某些行的条目。我想制作一个新的载体。如果我的两个初始列中的一个具有数值,我希望该行的新向量条目为该数值。所以从这里开始:

c1 c2
1  NA
2  NA
NA 3

到此:

c1  c2  c3
1   NA  1
2   NA  2
NA  3   3

我可以使用for循环执行此操作:

for (i in 1:length(c1)) {
  if (!is.na(c1[i])) {
    c3[i] <- c1[i]
  } else {
    if (!is.na(c2[i])) {
      c3[i] <- c2[i]
    }
  }
}

但我假设有一种更清洁的方法可以利用R的功能。谢谢!

1 个答案:

答案 0 :(得分:3)

您可以使用pmax/pmin

df1$c3 <-  do.call(pmax, c(df1, na.rm=TRUE))
df1
#  c1 c2 c3
#1  1 NA  1
#2  2 NA  2
#3 NA  3  3
逻辑矩阵(max.col)上的

!is.na(df1)以获取每行的最大值的列索引,并提取具有行索引(cbind)的1:nrow(df1)元素。

df1$c3 <- df1[cbind(1:nrow(df1),max.col(!is.na(df1)))]

数据

df1 <- structure(list(c1 = c(1L, 2L, NA), c2 = c(NA, NA, 3L)),
 .Names = c("c1", 
"c2"), class = "data.frame", row.names = c(NA, -3L))