2012-11-25 3 views
2

data.table에서 일부 집계를 수행하려고하는데 솔루션을 찾을 수없는 한 가지 문제에 직면하고 있습니다. 문제는 정말 간단합니다. 하나 이상의 차원에서 data.table의 일부 값을 요약하고자합니다.data.table에서 둘 이상의 열로 그룹화하는 방법?

Export4R[,sum(units),by=Type] 

이 다음과 같은 라인을 따라 뭔가 제공 :

는 다음 코드를 받고 아무 문제가 작동하지해야

Type Value 
foobar 45 
barfoo 25 

을하지만 지금은 그것을 더 조금 아래로 약간의 휴식을 좋아하는

Type Month Value 
foobar Mar  12 
foobar Apr  7 
.... 

나는 대구의 라인이 작업을 수행하려고 :이 같은 테이블을 얻을 수 있도록 노력하겠습니다

Export4R[,sum(units),by=Type,Month] 

이 가장 가능성이 매우 간단한 문제입니다,하지만 난 답을 찾는 문제가 : 전자 같은,하지만 불행히도이 작동하지 않습니다.

도움을 주셔서 감사합니다.

+0

@Matthew Dowle이 (가) 편집 해 주셔서 감사합니다. 보통 그렇게하지만 웬일인지 잊어 버렸습니다. – Jochem

답변

3
Export4R[,sum(units),by="Type,Month"] 

또는

Export4R[,sum(units),by=list(Type,Month)] 



후자 구문은 열 이름 및 이름의 표현을 허용; 예를 들어,

Export4R[,sum(units),by=list(Grp1=substring(Type,1,2), Grp2=Month)] 

가, BTW 당신이 많은 회선을 통해 긴 쿼리를 포맷 할 수 있습니다 :

Export4R[,list(
    s = sum(units) 
    ,m = mean(units) 
),by=list(
    Grp1=substring(Type,1,2) 
    ,Grp2=Month 
)] 

쉽게 추가하고 열을 주석 처리 할 수 ​​있도록 그렇게 시작 부분에 쉼표를 착용하는 이유는, 마지막 항목의 닫는 괄호로 어지럽히 지 않고; 예 :

Export4R[,list(
    s = sum(units) 
    # ,m = mean(units) 
),by=list(
    Grp1=substring(Type,1,2) 
    # ,Grp2=Month 
)] 

그 아이디어는 SQL에서 비롯된 것입니다.

+0

좋은 답변입니다! 감사! – Jochem

+0

@MatthewDowle 인덱스 (키)가 아닌'by '표현식이있을 때와 같은 성능이 무엇입니까? 5 + M 행과 수천 개의 다른 그룹 값이있는 테이블의 목록 열 표현식을 그룹화하는 데이 방법을 사용하려고합니다. – Sim

+0

@Sim 데이터 세트에 시간과 노력을 들여야합니다. 가능한 경우 정수 유형을 시도하고 유지하십시오. 태그에 키가없는 키 대 타이밍과 차이를 만드는 지점에서 벤치 마크가 있습니다. –

관련 문제