2012-08-10 132 views
3

可能重複:
Reshape data from long to wide format R快速的方法來重塑

有了:

day <- c(1, 1, 2, 2) 
prod <- c(1, 2, 1, 2) 
cost <- c(20.1, 17.7, 15.2, 23.3) 
record <- data.frame(day=day, prod=prod, cost=cost) 

record 
    day prod cost 
1 1 1 20.1 
2 1 2 17.7 
3 2 1 15.2 
4 2 2 23.3 

什麼是一個很好的(快速)的方式來重塑數據:

 day_1 day_2 
prod_1 20.1 15.2 
prod_2 17.7 23.3 

謝謝!

+0

很抱歉,因爲我沒有找到重複正確的詞來尋找類似的問題。謝謝大家回答! – Rock 2012-08-10 19:30:49

回答

3

我認爲dcastreshape2封裝具有簡單的語法:

library(reshape2) 
dcast(prod ~ day, data=record, value.var='cost') 

    prod 1 2 
1 1 20.1 15.2 
2 2 17.7 23.3 

然而,這個問題已經被問了很多次,很可能會被迅速關閉。

4

爲什麼不使用tapply - 如果有唯一值的總和功能並不重要:

> tapply(record$cost,list(record$prod, record$day), FUN=sum) 

    1 2 
1 20.1 15.2 
2 17.7 23.3 
+0

這可能不適用,因爲在特定的日子裏可能會有一些產品缺失,但除此之外其他方面都非常出色。謝謝! – Rock 2012-08-10 19:21:06

+1

應該可以正常工作,您最終只會在單元格中出現「NA」,而您的數據缺失。這對我來說似乎是一個很好的行爲。 – Ina 2012-08-10 19:23:30

6

我們也可以使用xtabs

xtabs(cost ~ prod + day, data = record) 

    day 
prod 1 2 
    1 20.1 15.2 
    2 17.7 23.3 
+0

+1不需要我複製你的答案。打掃乾淨。 – 2012-08-10 19:33:52