2016-08-18 6 views
-3

数百万行のデータがあり、サブセットを作成する必要があります。ハードに努力し、ウェブ全体を検索しても成功しません。質問です:基準の組み合わせに基づいてデータをサブセット化する方法R

すべてID & item組み合わせについてvalueの唯一の最小値を含むサブセットを作成する方法は?

データ構造は次のようになります。

> df = data.frame(ID = c(1,1,1,1,2,2,2,2), 
      item = c('A','A','B','B','A','A','B','B'), 
      value = c(10,5,3,2,7,8,9,10)) 

> df 
    ID item value 
1 1 A 10 
2 1 A  5 
3 1 B  3 
4 1 B  2 
5 2 A  7 
6 2 A  8 
7 2 B  9 
8 2 B 10 

結果は次のようになります。

ID item value 
    1 A  5 
    1 B  2 
    2 A  7 
    2 B  9 

任意のヒントを大歓迎します。ありがとうございました!

答えて

1

私たちは、 '価値'

aggregate(value~., df, min) 
# ID item value 
#1 1 A  5 
#2 2 A  7 
#3 1 B  2 
#4 2 B  9 

または使用のminを取得するために、グループ化変数 'ID' と 'アイテム' でbaseRからaggregateを使用することができますdplyr

library(dplyr) 
df %>% 
    group_by(ID, item) %>% 
    summarise(value = min(value)) 

またはdata.table

library(data.table) 
setDT(df)[, .(value = min(value)) , .(ID, item)] 

それとも別のオプションは、orderになると

setDT(df)[order(value), head(.SD, 1), .(ID, item)] 
をグループ化した後 first行になるだろう
関連する問題