Могу ли я изменить tapply на агрегат, чтобы получить тот же результат?

dat=data.frame(
    year=c(rep(2007,5),rep(2008,3),rep(2009,3)),
    province=c("a","a","b","c","d","a","c","d","b","c","d"),
    sale=1:11)
tapply(dat$sale,list(dat$year,dat$province),sum)
      a  b  c  d
2007  3  3  4  5
2008  6 NA  7  8
2009 NA  9 10 11

В этом случае, как я могу преобразовать tapply в агрегат, чтобы получить тот же результат?


person showkey    schedule 04.11.2013    source источник
comment
Могу я спросить, почему? tapply не работает для вас так, как вы ожидали? Общее решение было бы (если вы хотите использовать aggregate) было бы сначала aggregate, а затем reshape. Что-то вроде: reshape(aggregate(sale ~ year + province, dat, sum), direction = "wide", idvar="year", timevar="province"), но не знаю почему, поэтому не решаюсь опубликовать это как ответ.   -  person A5C1D2H2I1M1N2O1R2T1    schedule 04.11.2013
comment
Другим вариантом будет использование xtabs, результат будет в нужном вам формате: xtabs(sale~year+province, data=dat)   -  person Jilber Urbina    schedule 04.11.2013


Ответы (1)


Это будет не таблица, а презентация «длинного формата».

> aggregate(dat$sale,list(dat$year,dat$province),sum)
   Group.1 Group.2  x
1     2007       a  3
2     2008       a  6
3     2007       b  3
4     2009       b  9
5     2007       c  4
6     2008       c  7
7     2009       c 10
8     2007       d  5
9     2008       d  8
10    2009       d 11

Считаете ли вы, что то же самое, не ясно. Информативность та же.

person IRTFM    schedule 04.11.2013