我正在看书的部分内容。对于特定范围的页面,我有一个指标,每本书都有一个类别。我的数据框类似于:
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)
但这似乎是啰嗦,特别是如果我有三个以上的页面需要重新排序(很快就会发生)。
谢谢, 编
答案 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