在 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)
这是结合了 findInterval
和 tapply
的简单基础解决方案
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)
我有一组数据(成本和距离)我想根据距离聚合这些 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)
这是结合了 findInterval
和 tapply
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)