我需要在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行。我想我可以用某种方式计算缺失并将其用作规则吗?
答案 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}}包含所有新列。