具有多个变量的R中的复杂数据重新整形

时间:2016-03-10 15:31:15

标签: r reshape

我有一个数据集,其结构如下:

question <- c(rep("Q1", 4), rep("Q2", 4), rep("Q3", 4))
sector <- c(rep(c("Sector1", "Sector2", "Sector3", "Sector4"),3))
A <- round(rnorm(12),2)
B <- round(rnorm(12),2)
C <- round(rnorm(12),2)
D <- round(rnorm(12),2)
dat <- data.frame(question, sector, A, B, C, D)
dat

   question  sector     A     B     C     D
1        Q1 Sector1  0.86  -2.3 -0.31   0.6
2        Q1 Sector2 -1.81  0.19  0.82   0.6
3        Q1 Sector3 -0.03 -0.13  0.23  0.36
4        Q1 Sector4 -1.33  0.26  0.79 -0.47
5        Q2 Sector1  0.69 -0.51  -1.5  -0.3
6        Q2 Sector2 -0.34  1.19  0.98   0.6
7        Q2 Sector3 -0.22 -1.25 -0.83  1.42
8        Q2 Sector4   0.1  0.21  -0.2     0
9        Q3 Sector1 -0.35 -0.91 -1.48  -1.1
10       Q3 Sector2  1.15 -1.05 -1.19  1.69
11       Q3 Sector3  0.41  1.17 -0.28 -0.07
12       Q3 Sector4  0.21 -1.15  0.97 -0.55

A,B,C,D列对应国家/地区。我想重塑数据,以便每个国家/地区有四行(每个扇区一行),每个问题都有一列。 我的想法是使用如下的两步解决方案:

第1步:reshape为宽幅

dat1 <- reshape(dat,timevar = "question", idvar="sector", direction = "wide")
dat1

   sector  A.Q1  B.Q1  C.Q1  D.Q1  A.Q2  B.Q2  C.Q2 D.Q2  A.Q3  B.Q3  C.Q3  D.Q3
1 Sector1  0.86  -2.3 -0.31   0.6  0.69 -0.51  -1.5 -0.3 -0.35 -0.91 -1.48  -1.1
2 Sector2 -1.81  0.19  0.82   0.6 -0.34  1.19  0.98  0.6  1.15 -1.05 -1.19  1.69
3 Sector3 -0.03 -0.13  0.23  0.36 -0.22 -1.25 -0.83 1.42  0.41  1.17 -0.28 -0.07
4 Sector4 -1.33  0.26  0.79 -0.47   0.1  0.21  -0.2    0  0.21 -1.15  0.97 -0.55

第2步:reshape使用不同的规范返回长格式。 但是此代码无法正常工作。

A <- c(grep("A", names(dat1), value=TRUE))
B <- c(grep("B", names(dat1), value=TRUE))
C <- c(grep("C", names(dat1), value=TRUE))
D <- c(grep("D", names(dat1), value=TRUE))

reshape(dat1, varying=list(A,B,C,D), direction="long",sep=".")

我也试过

reshape(dat1, varying=list(A,B,C,D), direction="long", idvar="Country", sep=".", v.names=c("Q1","Q2","Q3"), ids=c("A","B","C","D"), timevar="sector")


    sector    Q1    Q2    Q3 Country
A.1      1  0.86  -2.3 -0.31       A
B.1      1 -1.81  0.19  0.82       B
C.1      1 -0.03 -0.13  0.23       C
D.1      1 -1.33  0.26  0.79       D
A.2      2  0.69 -0.51  -1.5       A
B.2      2 -0.34  1.19  0.98       B
C.2      2 -0.22 -1.25 -0.83       C
D.2      2   0.1  0.21  -0.2       D
A.3      3 -0.35 -0.91 -1.48       A
B.3      3  1.15 -1.05 -1.19       B
C.3      3  0.41  1.17 -0.28       C
D.3      3  0.21 -1.15  0.97       D

这样可以正确组织数据,但其中的值未正确重新排列。

如果有任何建议可以解决这个问题,我将不胜感激。还请解释一下,我在第2步中做错了什么。

0 个答案:

没有答案