简洁的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))