2016-06-27 1 views
0

비슷한 질문이 있지만 본인의 데이터에 적용 할 수 없습니다. 가치에 대한 집계가 합계 인 제품 ID 및 수익별로 값, 값 2 및 값 3을 집계하려고합니다. 하나; 난 단지 중복 여기 r에 합계와 중복을 합계

에 대한 하나 개의 값을 표시 값 2 및 VALUE3을 원하는 것은 내 코드입니다 :

aggregate(Value, Value2, Value3 ~product_id + Revenue, dat,sum) 

데이터 :

product i_d Revenue Value Value2 Value 3 
1   in  1  1  1 
2   in  6  2  2 
1   out  0  3  3 
2   out  0  4  4 
: 그것과 같을 것이다 있도록

dat <-structure(list(product_id = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L), 
       Date = c("January", "February", "March", "January", "February", "March", "January", "February", "March", "January", "February", "March"), 
       Revenue = c("in", "in", "in", "out", "out", "out", "in", "in", "in", "out", "out", "out"), 
       Value = c(0L, 1L, 0L, 0L, 0L, 0L, 1L, 2L, 3L, 0L, 0L, 0L), 
      Value2 = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L), 
      Value3 = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L) 
      ), 
      .Names = c("product_id", "Date", "Revenue", "Value", "Value2", "Value3"), 
      class = "data.frame", row.names = c(NA, -12L)) 

+0

데이터 정의에 오타가 있습니다. Value2는 사용하지 않지만 Value3은 두 번 정의됩니다. – lmo

+0

일단 수정하면 다음이 작동합니다 :'aggregate (cbind (value, value2, value3) ~ product_id + Revenue, data = dat, sum)'. 'cbind'를 사용하여 계산할 여러 변수를 포함 할 수 있습니다. – lmo

답변

0
dat <-structure(list(product_id = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 2L, 2L, 2L, 2L, 2L), 
        Date = c("January", "February", "March", "January", "February", "March", "January", "February", "March", "January", "February", "March"), 
        Revenue = c("in", "in", "in", "out", "out", "out", "in", "in", "in", "out", "out", "out"), 
        Value = c(0L, 1L, 0L, 0L, 0L, 0L, 1L, 2L, 3L, 0L, 0L, 0L), 
        Value2 = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L), 
        Value3 = c(1L, 1L, 1L, 2L, 2L, 2L, 3L, 3L, 3L, 4L, 4L, 4L) 
), 
.Names = c("product_id", "Date", "Revenue", "Value", "Value2", "Value3"), 
class = "data.frame", row.names = c(NA, -12L)) 

res <- aggregate(dat[,colnames(dat) %in% c("Value", "Value2", "Value3")],by=list(dat$product_id, dat$Revenue),FUN=sum) 

colnames(res) <- c("product_id", "Revenue", "Value", "Value 2", "Value 3") 
res 
    product_id Revenue Value Value 2 Value 3 
1   1  in  1  3  3 
2   2  in  6  9  9 
3   1  out  0  6  6 
4   2  out  0  12  12