在 r 中创建 class 个区间并对值求和

Create class intervals in r and sum values

我有一组数据(成本和距离)我想根据距离聚合这些 ns classes 并找到聚合数据的成本总和。

这里有一些示例表。

Nam Cost    distance
1   1005    10
2   52505   52
3   51421   21
4   651     10
5   656     0
6   5448    1

   Class From   To
        1   0   5
        2   5   15
        3   15  100

结果

Class   Sum
    1   6104
    2   1656
    3   103926

我正在做这件事,但需要很多时间来处理。我确定有更好的方法

for (i in 1:6)
{
  for (j in 1:3)
  {
    if((Table_numbers[i,3]<=classes[j,2])& (Table_numbers[i,3]<classes[j,3]))
    {
      result_table[j,2]<-result_table[j,2]+ Table_numbers [i,2]
    } 

  }

}

我也使用了 class 间隔,但是对于每个 class 我得到了距离的计数,但我需要成本的总和。

我也尝试使用 group_by 但我不知道我是否可以使用 classes 进行分组。

你知道我怎样才能更有效地做到这一点吗?

这是一个解决方案,其中 cut 生成 类 和 dplyr::group_by 按组求和:

library(dplyr)

mutate(df,class=cut(distance,c(0,5,15,100),include.lowest = TRUE)) %>% 
  group_by(class) %>% 
  summarize(sum=sum(Cost))

数据

df <- read.table(text="Nam Cost    distance
1   1005    10
2   52505   52
3   51421   21
4   651     10
5   656     0
6   5448    1",head=TRUE)

这是结合了 findIntervaltapply

的简单基础解决方案
tapply(Table$Cost, findInterval(Table$distance, c(0, Classes$To)), sum)
#    1      2      3 
# 6104   1656 103926 

如果 类 名称可能不同(不仅仅是计数器),您可以修改为

tapply(Table$Cost, Classes$Class[findInterval(Table$distance, c(0, Classes$To))], sum)