2017-02-15 7 views
0

テーブルクエリここ

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  

ある各パーセルは、パケットを有し、各パケットは、BおよびCの建物を有しています。目的は、各区画内の建物の総数(例えば、80%)を構成するパケットを捕捉することである。たとえば、パーセル3のすべての建物の合計は、50 + 20 + 10 + 80 + 50 = 210です。 210の80%は168です。したがって、80%を達成するにはパケット1(140)+パケット2(70)が必要です。

私は現在、パケットのそれぞれについて手作業で合計を得ようとしており、次に比率を手動で計算しようとしています。私はRでこれを達成するためのより良い方法があることを知っています。私はdplyr、sqldf、および他のR関数を使用しましたが、これは私にとっては少し険しいです。ヘルプは高く評価しました。

+0

を私はあなたが「私たちはそれを達成するためにパケット1と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