colSums()的特殊用途,仅当缺少1个或更少时,na.rm = TRUE

时间:2013-01-18 18:05:59

标签: r if-statement sum na na.rm

我需要在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)colSums(dfn, na.rm = TRUE)。在我的真实数据中,有超过三列,也有超过4行。我想我可以用某种方式计算缺失并将其用作规则吗?

2 个答案:

答案 0 :(得分:5)

我认为您不能仅使用colSums执行此操作,但可以使用ifelse添加到其结果中:

colSums(dfn,na.rm=TRUE) + ifelse(colSums(is.na(dfn)) > 1, NA, 0)
 a  b  c 
 9 NA  4 

答案 1 :(得分:1)

@James的答案没有错,但这里的方式稍微清晰一点:

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

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