简洁的R代码相当于Excel中的sumif函数 – 特别适用于数据框行
我需要从数据框中的一个列子集中有select地添加行的值。 值可以是0,1,2或3的整数。2s和3s的总和(不是2s和3s的计数,这很容易)给出了我们所测量的“强度”。 假设我的数据框是60列,我只想看看第二到第十一列。 实现这个(单向)的excel代码是相当简单的: =sumif(a2:a11,">1")
。 这将在该范围内添加所有2s和3s。
尽pipe过去我使用了aggregate()
,但是在这个话题上的大部分答案并不是真的想要做我期望做的事情,而且我也无法find一种方法让aggregate()
以我的方式运行需要。 我也很困惑,试图让rowSums()
来做到这一点。
最终我意识到我可以做到以下几点:
apply(data[,2:11], 1, function(x)sum(2*(x==2), 3*(x==3), na.rm=T))
这是迄今为止我发现复制我的特定期望的行为相当于Excel的sumif
最快,最优雅的方式。
如果有人有更好的方法,我会很高兴听到。
#DATA set.seed(42) df = data.frame(matrix(sample(0:3, 250, replace = TRUE), ncol = 50))
以下是如何使用rowSums()
rowSums(df[,2:11] * (df[,2:11] > 1), na.rm = TRUE) #[1] 18 13 11 19 11
比较你的解决scheme
apply(df[,2:11], 1, function(x) sum(2*(x==2), 3*(x==3), na.rm=TRUE)) #[1] 18 13 11 19 11
一条build议:
apply(data[,2:11], 1, function(x) sum(x[x %in% 2:3], na.rm = TRUE))