2017-05-19 2 views
1

3番目の条件を満たす別の列の値に基づいて1つの列をグループ化する大きなdata.tableがありますカラム。私はループでこれを行うことができますが、それはdata.tableで行うことができますか?data.tableの3番目の列の条件に基づいて2番目の列の値で列をグループ化します

テーブルは次のようになります。私は必要なもの

Group Col1 Col2 
1:  A 1 0.0 
2:  A 2 0.1 
3:  A 3 0.2 
4:  A 4 0.5 
5:  A 5 0.9 
6:  B 6 0.0 
7:  B 7 0.2 
8:  B 8 0.4 
9:  B 9 0.9 
10: B 10 1.0 

各グループでcol2が0.5に最も近いのCol1の行の値を取得するためのものです。 Col2は0から1までの累積値です。予想される結果は次のとおりです。

Group Col1 
1:  A 4 
2:  B 8 

これはdata.tableで実行できますか?私はこれを行うのに苦労しているので、どんなインプットやガイダンスも高く評価されます。ここで「グループ」によってグループ化した後

DAT=data.table(Group=c(rep("A",5),rep("B",5)),Col1=1:10,Col2=c(0,.1,.2,.5,.9,0,.2,.4,.9,1)) 

答えて

3

上記data.tableあり、最小値(which.min)Oインデックスを取得、0.5と「Col2に」の絶対差を取り、「のCol1」をサブセットするためにそれを使用私は必要なもの

DAT[, .(Col1 = Col1[which.min(abs(Col2 - 0.5))]), Group] 
# Group Col1 
#1:  A 4 
#2:  B 8 
+0

おかげで、これは非常に巧妙なソリューションです – Camilo

2

各グループでcol2が0.5に最も近いのCol1の行の値を取得するためのものです。

ローリングを使用して参加:

DAT[.(unique(Group), .5), on=.(Group, Col2), roll="nearest"] 
# Group Col1 Col2 
# 1:  A 4 0.5 
# 2:  B 8 0.5 
関連する問題