2014-10-01 2 views
1

Я знаю стандартную агрегатную функцию, то пример кодаСовокупные/сумма с размером в строке и Colum

aggregate(hp~cyl/vs, data=mtcars, FUN="sum", na.rm=TRUE) 

, который возвращает:

cyl vs hp 
1 4 0 91 
2 6 0 395 
3 8 0 2929 
4 4 1 818 
5 6 1 461 

Однако я хотел бы поставить «против» в колонны, такие как:

 vs 0 1 
    cyl  hp hp 
1 4  91 818 
2 6 395 461 
3 8 2929 

Как это можно сделать в R?

+0

Я не понимаю этикетку 'hp' в вашем ожидаемом выходе. Уровни 'vs' -' 0' и '1' – akrun

ответ

1

Вот data.table ответ:

mt = as.data.table(mtcars) 
dcast.data.table(mt, cyl ~ vs, value.var="hp", fun.agg = sum) 

# cyl 0 1 
# 1: 4 91 818 
# 2: 6 395 461 
# 3: 8 2929 0 
1

Попробуйте xtabs

xtabs(hp~cyl+vs, res) 
    #  vs 
#cyl 0 1 
# 4 91 818 
# 6 395 461 
# 8 2929 0 


res <- aggregate(hp~cyl/vs, data=mtcars, FUN=sum, na.rm=TRUE) 
1

Вы можете использовать xtabs() непосредственно на данных mtcars, без использования aggregate() в качестве промежуточного шага:

xtabs(hp ~ cyl + vs, data = mtcars)