我有一个数据集,其结构如下:
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步中做错了什么。