我的数据框有任意数量的数字变量
d <- data.frame(X1 = c(-1, -2, 0), X2 = c(10, 4, NA), X3 = c(-4, NA, NA))
如何计算每个变量的正值之和以使它们保持在列表中,如果变量没有正值或所有值都是NA,则返回此变量为0。
答案 0 :(得分:0)
我们可以使用apply
和ifelse
函数迭代每列,并将NA
或负值替换为0
apply(d, 2, function(x) sum(ifelse(is.na(x) | x < 0, 0, x)))
正如@ joel.wilson所指出的,有一种更简洁的逻辑编码方式:
apply(d, 2, function(x) sum(x[x > 0], na.rm = TRUE))
答案 1 :(得分:0)
library(expss)
d <- data.frame(X1 = c(-1, -2, 0), X2 = c(10, 4, NA), X3 = c(-4, NA, NA))
sum_col_if(gt(0), d)
# X1 X2 X3
# 0 14 0