2017-02-15 41 views
0

Вот таблицазапросов, чтобы захватить ТОП X% значений, основанных на агрегации подмножества

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  

Каждый пакет имеет пакеты и каждый пакет имеет, Б и здания. Цель состоит в том, чтобы захватить пакеты, которые составляют установленную корпорацию (например, 80%) от общего количества зданий в каждой посылке. Например, общее количество всех зданий в пакете 3 составляет 50 + 20 + 10 + 80 + 50 = 210; 80% 210 - 168. Таким образом, нам нужен пакет 1 (140) + пакет 2 (70) для достижения 80%.

В настоящее время я пытаюсь получить суммы для каждого из пакетов вручную, а затем вычислить пропорции вручную. Я знаю, что есть лучший способ добиться этого в R. Я использовал dplyr, sqldf и другие функции R, но для меня это немного круто. Помогите оценить.

+0

«нам нужно packet1 и packet2 для ее достижения». Однако я начал с ответа и могу редактировать его с помощью обновлений. – theArun

+0

Спасибо. Идея состоит в том, чтобы идентифицировать и разделить пакеты внутри каждой посылки, что даст нам в общей сложности 80%. Вы, конечно, предложили что-то очень полезное. В этом примере я хотел бы проиллюстрировать, что в пакете 3 пакеты 1 и 2 должны достигать 80% от общего значения. Конечная цель состоит в том, чтобы вывести строки, содержащие посылку и соответствующие пакеты, которые составляют до 80% или более. Надеюсь, это прояснится. – HexGuy

ответ

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 
+0

Спасибо Арун. Мне удалось вычислить общую сумму пакета и сумму группы на основе вашего метода, используя R, data.table. Я могу перейти к идентификации пакетов. – HexGuy