重新排列数据框?

时间:2014-06-09 09:51:03

标签: r

我正在看书的部分内容。对于特定范围的页面,我有一个指标,每本书都有一个类别。我的数据框类似于:

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)

但这似乎是啰嗦,特别是如果我有三个以上的页面需要重新排序(很快就会发生)。

谢谢, 编

1 个答案:

答案 0 :(得分: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