我正在看书的一部分。对于一定范围的页面,我有一个指标,每本书都有一个类别。我有一个类似于的数据框:
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)
但这似乎很困难,特别是如果我要重新排序三个以上的页面(很快就会发生)。
谢谢,埃德
如果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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句