我有一个数据集,如帖子底部所示。该数据有四列,称为 SIC、AT95Group、AT95Mean、AT95Med。 AT95Group 列具有四个值,例如“00”、“01”、“11”和“10”。目前,对于每个 SIC,AT95Group 的每个值都有四行。我想以某种方式 reshape 数据框,以便每个 SIC 只有一行。虽然之前我们为每个(SIC,AT95Group)对有两列,分别称为平均值和中值,但我们实际上希望创建 4*2 列(4 列用于组“00”、“11”、“01”、“10”)和 2对于(“平均值”和“中度”)。这八列类似于“00Mean”、“11Mean”、“00Med”、“11Med”等,以及每个 SIC 的相应值。
我发现这非常难做到。有什么建议,请提出来。谢谢。
> dput(head(pp,20))
structure(list(SIC = c(1L, 1L, 1L, 10L, 10L, 10L, 10L, 12L, 12L,
12L, 12L, 13L, 13L, 13L, 13L, 14L, 14L, 14L, 14L, 15L), AT95Group = c("11",
"10", "00", "11", "01", "00", "10", "01", "11", "10", "00", "11",
"01", "00", "10", "11", "01", "10", "00", "01"), AT95Med = c(0.0691039117115276,
0.0608649722972575, 0.0609974198491522, 0.215571816296268, 0.305308985848382,
0.351312558091798, 0.352704719896703, 0.0459887720804718, 0.0304466181779069,
0.0513875431555943, 0.0541431932578377, 0.0650920855876547, 0.143724642017362,
0.156092793582293, 0.0976059673595903, 0.0116620184564053, 0.0188895210677074,
0.0356836223212195, 0.0513040852859517, 0.0982448708035204),
AT95Mean = c(0.0691039117115276, 0.0608649722972575, 0.0609974198491522,
0.215571816296268, 0.305308985848382, 0.351312558091798,
0.352704719896703, 0.0459887720804718, 0.0304466181779069,
0.0513875431555943, 0.0541431932578377, 0.0650920855876547,
0.143724642017362, 0.156092793582293, 0.0976059673595903,
0.0116620184564053, 0.0188895210677074, 0.0356836223212195,
0.0513040852859517, 0.0982448708035204)), .Names = c("SIC",
"AT95Group", "AT95Med", "AT95Mean"), row.names = c(241L, 236L,
27L, 1126L, 1035L, 1030L, 664L, 1269L, 1259L, 1245L, 1244L, 3919L,
4722L, 3329L, 3222L, 4886L, 4889L, 4951L, 4860L, 5108L), class = "data.frame")
尝试上述代码的尝试失败了。不确定如何继续。
pp <- unique(dacc1[,c("SIC","AT95Group","AT95Med","AT95Mean")])
xsic <- unique(pp[,"SIC"]);
xlist <- list(xsic,rep("AT95",length(xsic)));
编辑:
运行troy的结果后得到的结果:
> pp1 <- head(pp,20)
SIC AT95Group AT95Med AT95Mean
241 1 11 0.06910391 0.06910391
236 1 10 0.06086497 0.06086497
27 1 00 0.06099742 0.06099742
1126 10 11 0.21557182 0.21557182
1035 10 01 0.30530899 0.30530899
1030 10 00 0.35131256 0.35131256
664 10 10 0.35270472 0.35270472
1269 12 01 0.04598877 0.04598877
1259 12 11 0.03044662 0.03044662
1245 12 10 0.05138754 0.05138754
1244 12 00 0.05414319 0.05414319
3919 13 11 0.06509209 0.06509209
4722 13 01 0.14372464 0.14372464
3329 13 00 0.15609279 0.15609279
3222 13 10 0.09760597 0.09760597
4886 14 11 0.01166202 0.01166202
4889 14 01 0.01888952 0.01888952
4951 14 10 0.03568362 0.03568362
4860 14 00 0.05130409 0.05130409
5108 15 01 0.09824487 0.09824487
> molten<-melt(pp);
Using AT95Group as id variables
molten$variable<-paste(gsub("[AT95]","",molten$variable),molten$AT95Group," ");
cast(molten[,c(1,3,4)], SIC ~ variable);
> cast(molten[,c(1,3,4)], SIC ~ variable);
Error in `[.data.frame`(molten, , c(1, 3, 4)) :
undefined columns selected
最佳答案
郑重声明,base
中还有一个 reshape
函数(嗯,stats
):
reshape(pp, direction = "wide", idvar = "SIC",
timevar = "AT95Group", v.names = c("AT95Med", "AT95Mean"))
# SIC AT95Med.11 AT95Mean.11 AT95Med.10 AT95Mean.10 AT95Med.00 AT95Mean.00 AT95Med.01 AT95Mean.01
#241 1 0.06910391 0.06910391 0.06086497 0.06086497 0.06099742 0.06099742 NA NA
#1126 10 0.21557182 0.21557182 0.35270472 0.35270472 0.35131256 0.35131256 0.30530899 0.30530899
#1269 12 0.03044662 0.03044662 0.05138754 0.05138754 0.05414319 0.05414319 0.04598877 0.04598877
#3919 13 0.06509209 0.06509209 0.09760597 0.09760597 0.15609279 0.15609279 0.14372464 0.14372464
#4886 14 0.01166202 0.01166202 0.03568362 0.03568362 0.05130409 0.05130409 0.01888952 0.01888952
#5108 15 NA NA NA NA NA NA 0.09824487 0.09824487
关于在 R 中 reshape 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20113884/