2013-01-01 1 views
0

아마도이 문제를 잘 정의하지 않았습니다. 나는 R이 sapply에서 돌아 오는 것을 이해하는 것 같지 않습니다. 나는 계층 적 데이터의 큰 데이터 프레임을 가지고있다. 기둥의 반은 요인이고 반은 수치입니다. 몇 가지 요인을 포함하는 새로운 데이터 프레임을 얻고 숫자 열을 합한 값을 얻으려고합니다. 그러나 합계를 요인 수준으로 구분하여 유지하고 싶습니다.R의 계층 적 데이터 - 트리를 유지 보수하는 동안 서브 세트를 어떻게 합산합니까?

예를 들어, 아래 예제 데이터에서 주, 구, 지사가 같은 데이터 프레임을 만들고 싶지만 같은 유형이지만 색상이 다른 주문에 대한 데이터를 합산하고 싶습니다. 나는 sapply의 반복적 인 사용이 그것을 할 것이라고 생각하고있다. 그러나 나는 그것을 작동시키는 것처럼 보이지 않는다.

샘플 데이터 : aggregate에 대한

state district branch order colour number cost amount 
CA central newtown shoes black 6 25.50 127.40 
CA central newtown shoes brown 3 32.12 75.40 
CA central newtown gloves blue 15 12.20 157.42 
CA central newtown gloves black 9 8.70 65.37 
CA central columbus shoes black 12 30.75 316.99 
CA central columbus shoes brown 1 40.98 45.00 
CA central columbus gloves blue 47 11.78 498.32 
CA central columbus gloves black 23 7.60 135.50 

답변

1

또 다른 작업. 데이터 프레임 dat 호출하십시오 ~ 왼쪽에서

aggregate(cbind(cost, amount) ~ state+district+branch+order, data=dat, FUN=sum) 

## state district branch order cost amount 
## 1 CA central columbus gloves 19.38 633.82 
## 2 CA central newtown gloves 20.90 222.79 
## 3 CA central columbus shoes 71.73 361.99 
## 4 CA central newtown shoes 57.62 202.80 

cbind 우리가 별도로 각 열을 원하는 나타내는 데 사용됩니다. cost + amount이 지정되면 숫자이므로 여기에 합계를 의미합니다. ~의 오른쪽에는 요소가 있으므로 +는 각 요소의 각 수준별로 집계된다는 것을 의미합니다.

+0

음의에 대한 가장 직관적, 그것은 잘 어울려 ...하지만 오류 때 받고 있어요 필자는 다음과 같이 사용합니다 :'클래스 "수식"을 data.frame'으로 강요 할 수는 없습니다. 수식은 ~로 인한 것 같지만 패키지마다 다르게 사용됩니다. 로드 된 패키지가 없습니다. 일반 바닐라 R. 나는 list = state (주, 지방, 지사, 주문)를 사용하여 시도했지만, 제대로 작동하지 않습니다. – Suz

1

난 항상 발견했습니다 SQL 집계 :

library(sqldf) 

    # write a full aggregation command, grouping by your specified columns 
    x <- sqldf("select state, district, branch, order, sum(cost) as sumcost, sum(amount) as sumamount from yourdata group by state, district, branch, order") 

    # print your result 
    x 

여기 an explanation of aggregate() and tapply() 그리고 여기에 같은 explanation of sql within r for aggregation