如何将此数据重新格式化为宽格式?
species val price
setosa 5.1 3
setosa 4.9 3
setosa 4.7 3
setosa 4.6 2
Run Code Online (Sandbox Code Playgroud)
期望的输出:
species val1 val2 val3 val4 price1 price2 price3 price4
setosa 5.1 4.9 4.7 4.6 3 3 3 2
Run Code Online (Sandbox Code Playgroud)
我试过从tidyr传播,但没有成功.
data.tablev 1.9.6+允许你传递多个value.vars,所以你可以简单地做
library(data.table)
dcast(setDT(df), species ~ val + price, value.var = c("val", "price"))
# species val.1_4.6_2 val.1_4.7_3 val.1_4.9_3 val.1_5.1_3 price.1_4.6_2 price.1_4.7_3 price.1_4.9_3 price.1_5.1_3
# 1: setosa 4.6 4.7 4.9 5.1 2 3 3 3
Run Code Online (Sandbox Code Playgroud)
你可以试试这个:
> d
species val price
1 setosa 5.1 3
2 setosa 4.9 3
3 setosa 4.7 3
4 setosa 4.6 2
5 versicolor 5.1 3
6 versicolor 4.9 3
7 versicolor 4.7 3
8 versicolor 4.6 2
> t(sapply(split(d,d$species),function(x){unlist(x[,-1]) }))
val1 val2 val3 val4 price1 price2 price3 price4
setosa 5.1 4.9 4.7 4.6 3 3 3 2
versicolor 5.1 4.9 4.7 4.6 3 3 3 2
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |