2014-06-09 198 views
1

我在看書的部分。對於一定範圍的頁面,我有一個指標,每本書都有一個類別。我有一個類似於:重新排列數據框?

file value pages category 
a.pdf 17  A  green 
b.pdf 18  A  red 
a.pdf 22  B  green 
... 

無論時間或價值如何,每個文件都是相同的類別。因此,a.pdf將始終爲綠色,所以這些數據中的一部分是多餘的。我想將數據重新格式化爲如下形式:

file pages_A pages_B pages_C category 
a.pdf 17   22   7  green 
b.pdf 18   11   43  red 

... 

什麼是最優雅的方式來做到這一點。我試圖合併的子集在一起,並刪除列:

out = merge(subset(long, pages=="A"), subset(long, pages=="B"), by=c("file","category"), all=T) 
out = merge(out, subset(long, pages=="C", by=c("file","category", all=T) 

但這似乎囉嗦,尤其是如果我有三個以上的頁面重新排序(這會很快發生)。

感謝, 埃德

回答

4

如果temp是您的數據集

library(reshape2) 
dcast(temp, file + category ~ pages) 

## file category A B C 
## 1 a.pdf green 17 22 7 
## 2 b.pdf  red 18 11 43 

使用data.table它可能會更快,也許(沒有標杆雖然)

library(data.table) 
dcast.data.table(setDT(temp), file + category ~ pages) 

##  file category A B C 
## 1: a.pdf green 17 22 7 
## 2: b.pdf  red 18 11 43 
+0

非常感謝 - 這是大! – ThatGuy