[英]how would I get the below answer using melt/cast from reshape2 package
我有两个数据框, x
和y
。 我rbind
他们得到z
。 然后,我使用reshape
功能(不是包装)来获得以下答案。
set.seed(1234)
x <- data.frame(rp=c(1:5),dmg=1000*runif(5), loss=500*runif(5), model="m1")
y <- data.frame(rp=c(1:5),dmg=1000*runif(5), loss=500*runif(5), model="m2")
z <- rbind(x, y)
> z
rp dmg loss model
1 113.7 320.2 m1
2 622.3 4.7 m1
3 609.3 116.3 m1
4 623.4 333.0 m1
5 860.9 257.1 m1
1 693.6 418.6 m2
2 545.0 143.1 m2
3 282.7 133.4 m2
4 923.4 93.4 m2
5 292.3 116.1 m2
> reshape(z, idvar="rp", timevar="model", direction="wide")
rp dmg.m1 loss.m1 dmg.m2 loss.m2
1 113.7 320.2 693.6 418.6
2 622.3 4.7 545.0 143.1
3 609.3 116.3 282.7 133.4
4 623.4 333.0 923.4 93.4
5 860.9 257.1 292.3 116.1
我如何在reshape2中使用浇铸/熔化组合获得相同的结果?
> dcast(melt(z, c("rp", "model")), rp ~ variable + model)
rp dmg_m1 dmg_m2 loss_m1 loss_m2
1 1 113.7034 693.5913 320.155303 418.64781
2 2 622.2994 544.9748 4.747878 143.11164
3 3 609.2747 282.7336 116.275253 133.41039
4 4 623.3794 923.4335 333.041879 93.36139
5 5 860.9154 292.3158 257.125571 116.11296
分解:首先使用melt
将其制成长形。 但是,您不想融合rp
和model
因为它们将在以后用于标识行和列。
> my.df <- melt(z, c("rp", "model"))
> my.df
rp model variable value
1 1 m1 dmg 113.703411
2 2 m1 dmg 622.299405
3 3 m1 dmg 609.274733
4 4 m1 dmg 623.379442
5 5 m1 dmg 860.915384
6 1 m2 dmg 693.591292
7 2 m2 dmg 544.974836
8 3 m2 dmg 282.733584
9 4 m2 dmg 923.433484
10 5 m2 dmg 292.315840
11 1 m1 loss 320.155303
12 2 m1 loss 4.747878
13 3 m1 loss 116.275253
14 4 m1 loss 333.041879
15 5 m1 loss 257.125571
16 1 m2 loss 418.647814
17 2 m2 loss 143.111642
18 3 m2 loss 133.410390
19 4 m2 loss 93.361395
20 5 m2 loss 116.112955
然后,使用dcast
将其转换为数据帧。 您希望rp
标识行, variable
和model
都标识列,然后用公式表示。
> dcast(my.df, rp ~ variable + model)
rp dmg_m1 dmg_m2 loss_m1 loss_m2
1 1 113.7034 693.5913 320.155303 418.64781
2 2 622.2994 544.9748 4.747878 143.11164
3 3 609.2747 282.7336 116.275253 133.41039
4 4 623.3794 923.4335 333.041879 93.36139
5 5 860.9154 292.3158 257.125571 116.11296
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.