【发布时间】:2017-07-11 20:09:58
【问题描述】:
我需要从数据框中的列子集中选择性地跨行添加值。值可以取整数 0、1、2 或 3。2 和 3 的总和(不是 2 和 3 的计数,这很容易)给出了我们正在测量的“强度”。假设我的数据框有 60 列长,我只想查看第 2 到第 11 列。实现这一点(一种方式)的 excel 代码非常简单:=sumif(a2:a11,">1")。这将添加该范围内的所有 2 和 3。
虽然我过去曾使用过aggregate(),但有关此主题的大多数答案并不是真正想做我想做的事情,而且我无法找到让aggregate() 发挥作用的方法我需要的方式。我也对试图让rowSums() 这样做感到困惑。
最终我意识到我可以做到以下几点:
apply(data[,2:11], 1, function(x)sum(2*(x==2), 3*(x==3), na.rm=T))
这是迄今为止我发现的最快和最优雅的复制我的特定期望行为的方法,相当于 Excel 的sumif。
如果有人有更好的方法,我会很高兴听到。
【问题讨论】:
-
sum_row_iffromexpsspackage:sum_row_if(gt(1), df[, 2:11])披露:我是包作者。 -
非常有帮助,谢谢 Gregory。
标签: r excel apply user-defined-functions sumifs