2017-02-15 4 views
0

에 기초하여 값 TOP 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  

각 소포 패킷을 가지고 있으며, 각 패킷은 A, B 및 C의 건물을 갖는다. 목표는 각 소포 내의 총 건물의 설정된 배수 (예 : 80 %)를 구성하는 패킷을 포착하는 것입니다. 예를 들어, 구역 3에있는 모든 건물의 합계는 50 + 20 + 10 + 80 + 50 = 210입니다. 210의 80 %는 168입니다. 따라서 우리는 패킷 1 (140) + 패킷 2 (70)가 80 %가되어야합니다.

현재 각 패킷에 대해 수동으로 합계를 계산하고 비율을 수동으로 계산하려고합니다. 나는 R에서 이것을 달성하는 더 좋은 방법이 있다는 것을 알고있다. 나는 dplyr, sqldf 및 다른 R 함수를 사용했지만 이것은 나에게 가벼운 것은 아니다. 도움말 감사. 난 당신이 data.table 패키지를 사용하여 찾고있는 것을 이해한다면

+0

"우리는 packet1 그것을 달성하기 packet2이 필요합니다." 그러나 나는 대답으로 시작했고 업데이트로 편집 할 수 있습니다. – theArun

+0

감사합니다. 아이디어는 우리에게 총 80 %를 줄 것입니다 각 소포 내에서 패킷을 식별하고 분리하는 것입니다. 확실히 유용한 것을 제안했습니다. 이 예에서 필자는 소포 3에서 패킷 1과 2가 총 가치의 80 %를 초과해야 함을 설명하고자했습니다. 마지막 목표는 총 80 % 이상의 소포 및 각 패킷을 포함하는 행을 출력하는 것입니다. 희망이 명확하게. – HexGuy

답변

0

: 나는 당신에 의해 뜻을 이해하지 못하는 것 같습니다

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