我想计算应用于另一列的一组间隔[n, +?)(即? n)的数据帧列的条件和.在下面的示例数据中,间隔应用于列a,列b中的值有条件地求和.对于[0, +?)所有列a值,所有值的总和也是? 0如此b_sum.对于[3, +?)只有一条记录是? 3如此b_sum为500.
输入数据
a b
1.1 100
2.3 150
0.1 20
0.5 80
3.3 500
1.6 200
1.1 180
Run Code Online (Sandbox Code Playgroud)
期望的结果
n b_sum
0 1230
1 1130
2 650
3 500
4 0
Run Code Online (Sandbox Code Playgroud)
我确信使用for循环这很容易; 然而; 我想避免这种方法,并使用矢量化的基础R或dplyr方法.
矢量化的解决方案
df <- df[order(df$a), ] # sort by "a" column
ind <- findInterval(0:4, df$a) + 1
sum(df$b) - cumsum(c(0, df$b))[ind]
#[1] 1230 1130 650 500 0
Run Code Online (Sandbox Code Playgroud)