2016-08-18 5 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 행을 얻을 것
관련 문제