这是表格
parcel| packet|a |b | c
1 | p1 |20|40|50
1 | p2 |20|90|50
1 | p3 |50|40|50
2 | p1 |80|40|50
2 | p2 |20|90|50
3 | p1 |10|80|50
3 | p2 |20|0|50
每个包裹都有包裹,每个包裹都有a,b和c建筑物。目标是捕获包含每个包裹内总建筑物的设定推荐(例如80%)的包。例如,地块3中所有建筑物的总数为50 + 20 + 10 + 80 + 50 = 210; 210的80%是168.因此,我们需要数据包1(140)+数据包2(70)达到80%。
我目前正在尝试手动为每个数据包完成总和,然后手动计算比例。我知道在R中有更好的方法来实现这一点。我使用了dplyr,sqldf和其他R函数,但这对我来说有点陡峭。帮助赞赏。
答案 0 :(得分:0)
如果我理解您要查找的内容,请使用data.table
包:
library(data.table)
dt <- data.table(parcel = c(1,1,1,2,2,3,3),
packet = c("p1","p2","p3","p1","p2","p1","p2"),
a = c(20,20,50,80,20,10,20),
b = c(40,90,40,40,90,80,0),
c = c(50,50,50,50,50,50,50))
dt[,total:= a+b+c,][,group:= sum(total)*.80,by = parcel]
dt
# parcel packet a b c total group
# 1: 1 p1 20 40 50 110 328
# 2: 1 p2 20 90 50 160 328
# 3: 1 p3 50 40 50 140 328
# 4: 2 p1 80 40 50 170 264