我正在尝试添加两列。我的数据框是这样的:

data <- data.frame(a = c(0,1,NA,0,NA,NA),
                   x = c(NA,NA,NA,NA,1,0),
                   t = c(NA,2,NA,NA,2,0))

我想添加一些这样的列:
yep  <- cbind.data.frame( data$a, data$x, rowSums(data[,c(1, 2)], na.rm = TRUE))

但是输出如下所示:
> yep

      data$a  data$x   rowSums(data[,c(1, 2)], na.rm = TRUE)
  1        0      NA                                      0
  2        1      NA                                      1
  3       NA      NA                                      0
  4        0      NA                                      0
  5       NA       1                                      1
  6       NA       0                                      0

我想要这样的输出:
> yep

      data$a  data$x   rowSums(data[,c(1, 2)], na.rm = TRUE)
  1        0      NA                                      0
  2        1      NA                                      1
  3       NA      NA                                      NA
  4        0      NA                                      0
  5       NA       1                                      1
  6       NA       0                                      0

如果列只包含 NA 值,我想保留 NA 值。

我怎么能做到这一点?

最佳答案

基础 R ( ifelse ):

cbind(data$a,data$x,ifelse(is.na(data$a) & is.na(data$x),NA,rowSums(data[,1:2],na.rm = TRUE)))

如果您正在查找列名,则将 cbind 替换为 cbind.data.frame
输出:
      [,1] [,2] [,3]
[1,]    0   NA    0
[2,]    1   NA    1
[3,]   NA   NA   NA
[4,]    0   NA    0
[5,]   NA    1    1
[6,]   NA    0    0

关于r - 合并两列维护缺失值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52853373/

10-16 22:11