2015-05-21 2 views
1

У меня есть следующий кадр данных в R:Сумма столбца при создании таблицы

origin destination amount 
1  1   2  50 
2  1   2 100 
3  1   2  20 
4  1   3 100 
5  2   3  30 
6  2   3  50 
7  2   1  20 
8  3   2  10 
9  3   2  40 
10  3   1  50 

И хочу, чтобы получить его в таблице, как это:

 1 2 3 
    1 0 170 100 
    2 20 0 80 
    3 50 50 0 

Я предполагаю, что это должно быть table функция, но это заставляет меня только следующее:

1 2 3 
1 0 3 1 
2 1 0 2 
3 1 2 0 

и Я не могу понять, как получить столбец amount в качестве значения в таблице смежности. Какие-нибудь советы?

ответ

2

Вы можете попробовать xtabs

xtabs(amount~origin+destination, df1) 
#  destination 
#origin 1 2 3 
#  1 0 170 100 
#  2 20 0 80 
#  3 50 50 0 

Или использовать tapply драм заменить NA с 0

with(df1, tapply(amount, list(origin, destination), FUN=sum)) 

Или, как @David Arenburg упоминалось, это может быть также сделано с пакетами, как reshape2, tidyr

library(reshape2) 
acast(df1, origin~destination, value.var='amount', sum) 
+1

Собираетесь ли вы добавить 'dcast' и' spread', или вы оставите его поклонникам Hadleyverse? :) –

+0

@DavidArenburg Спасибо, что напомнили мне. Я думал только о базовых параметрах R, поскольку у ОП возникали проблемы с таблицей – akrun

+1

@DavidArenburg 'spread' дает ошибку с повторяющимися идентификаторами. Таким образом, для этого может потребоваться несколько шагов. Я оставлю его открытым для фан-клуба :-) – akrun

Смежные вопросы