2

我需要对 data.frame 中的一些列进行求和,其中一条规则是,NA如果缺少一个以上的观察值,NA如果只有 1 个或更少的观察值无论如何都将被求和,则该列将被求和。

假设我有一些这样的数据,

dfn <- data.frame(
a  = c(3, 3, 0, 3),
b  = c(1, NA, 0, NA),
c  = c(0, 3, NA, 1))

dfn
  a  b  c
1 3  1  0
2 3 NA  3
3 0  0 NA
4 3 NA  1

我应用我的规则,并对缺少 2 个的列求和NA。所以我得到这样的东西。

  a  b  c
1 3  1  0
2 3 NA  3
3 0  0 NA
4 3 NA  1
5 9 NA  4

我玩过colSums(dfn, na.rm = FALSE)and colSums(dfn, na.rm = TRUE)。在我的真实数据中,有超过 3 列,也有超过 4 行。我想我可以以某种方式计算失踪人数并将其用作规则?

4

2 回答 2

5

我不认为你可以单独做到这一点colSums,但你可以使用添加到它的结果ifelse

colSums(dfn,na.rm=TRUE) + ifelse(colSums(is.na(dfn)) > 1, NA, 0)
 a  b  c 
 9 NA  4 
于 2013-01-18T18:17:18.623 回答
1

@James 的回答没有问题,但这里有一个更简洁的方法:

colSums(apply(dfn, 2, function(col) replace(col, match(NA, col), 0)))
# a  b  c 
# 9 NA  4 

match(NA, col)NA返回col中第一个的索引,replace将其替换为0并返回新列,并apply返回matrix所有新列的 a。

于 2013-01-18T18:40:23.097 回答