仅当缺少1或更少时,才特别使用colSums(),na.rm=TRUE
我需要对data.frame中的一些列求和,规则是,如果缺少多个观测值,则将一列求和为仅当缺少1或更少时,才特别使用colSums(),na.rm=TRUE,r,if-statement,sum,na,na.rm,R,If Statement,Sum,Na,Na.rm,我需要对data.frame中的一些列求和,规则是,如果缺少多个观测值,则将一列求和为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 我已经玩过colSums(dfn,na.rm=FALSE
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
我已经玩过
colSums(dfn,na.rm=FALSE)
和colSums(dfn,na.rm=TRUE)
。在我的真实数据中,有超过三列,也有超过四行。我想我可以以某种方式计算缺失并将其作为一种规则使用?我认为单用colSums
无法做到这一点,但您可以使用ifelse
将其添加到结果中:
colSums(dfn,na.rm=TRUE) + ifelse(colSums(is.na(dfn)) > 1, NA, 0)
a b c
9 NA 4
@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
返回包含所有新列的matrix
。效果很好,我没有意识到打开的+ifelse
。非常感谢@在此上下文中,ifelse
生成另一个与colSums
结果大小相同的向量。你只是把两个向量加在一起。我明白了,我一直对R中的函数可以自由组合印象深刻。非常感谢。
colSums(apply(dfn, 2, function(col) replace(col, match(NA, col), 0)))
# a b c
# 9 NA 4