用 NA 求和减

Summarize and subtract with NA

有人可以帮忙吗?

我有一个数据集

x <- data.frame(A = c(NA, '1', '0', '0'),
            B = c('0', '0', '0', NA),
            C = c('1', NA, NA, NA))

我需要生成这样的东西(生成两个变量 x5 和 x6):

 _ x1 x2 x3 x4  x5 x6
A  NA 1  0  0   1  2
B  0  0  0  NA  0  3
C  1  NA NA NA  1  0

谢谢

也许你可以试试下面的代码

setNames(
  cbind(
    data.frame(t(x)),
    t(sapply(x, function(v) table(factor(na.omit(v), levels = c(1, 0)))))
  ),
  paste0("x", 1:6)
)

这给出了

    x1   x2   x3   x4 x5 x6
A <NA>    1    0    0  1  2
B    0    0    0 <NA>  0  3
C    1 <NA> <NA> <NA>  1  0

我注意到您仍在处理此问题的评论。 @ThomasIsCoding 的回答很好,但以防万一,这里有一个替代方法,您也可以考虑 step-by-step 方法。

首先,转置您的数据框(我们称之为 df):

df <- as.data.frame(t(x))
df

    V1   V2   V3   V4
A <NA>    1    0    0
B    0    0    0 <NA>
C    1 <NA> <NA> <NA>

现在,对于另外 2 列,使用 rowSums 求和“1”和“0”的值。鉴于数据中存在 NA,您需要 na.rm = TRUE。值 1:4 表示前四列。

df$V5 <- rowSums(df[,1:4] == "1", na.rm = T)
df$V6 <- rowSums(df[,1:4] == "0", na.rm = T)
df

输出

    V1   V2   V3   V4 V5 V6
A <NA>    1    0    0  1  2
B    0    0    0 <NA>  0  3
C    1 <NA> <NA> <NA>  1  0