我正在尝试为多年中的多个变量创建一个面板数据集。我的数据在RStudio中采用以下格式:
2012 2012 2012 2012 2013 2013 2013 .....
Name Var1 Var2 Var3......Var10 Var1 Var2...Var10.....
X 1 4 20 .......
Y 2 7 25 ......
Z 3 9 26 ...... and so on for each variable across years
我想为这些图像创建一个面板数据集
Name Year Var1 Var2 Var3....Var10
X 2012
Y 2012
Z 2012
X 2013
Y 2013
Z 2013
我已按照以下步骤创建了面板:
合并了前两行,因此变量读为-2012.Var1,2012.Var2
使用collect函数为每个变量创建单独的数据集,如
Name Year Var1
X 2012.Var1 1
Y 2012.Var2 2
X 2013.Var1 and so on
然后我将表格组合成所需格式的一个数据框
对于步骤1:
colnames(df) <- paste(colnames(df), df[1, ])
对于步骤2:
Var1 <- df %>% gather(year, Var1, `2012.Var1`,`2012.Var2`and so on)
Creating a Dataset for Var1
- did the same for all the variables
对于步骤3:
new_data = cbind(Var1,Var2, ..., Var10) # Combining Different Datasets
names(new_data)
尽管代码可用于创建数据框,但是当变量数量众多且分布多年时,这非常繁琐且耗时。我在寻找一种更简单的方法来创建相同的数据框?
答案 0 :(得分:0)
我没有使用gather
的解决方案,但是您可以使用merge.stack
包中的splitstackshape
函数一次性解决此问题。 https://cran.r-project.org/web/packages/splitstackshape/splitstackshape.pdf#page18
我将添加一个简单的示例:
library(splitstackshape)
set.seed(123)
dt1 <- data.frame(id = LETTERS[1:10],
var1_2012 = runif(10, min = 1, max = 10),
var2_2012 = runif(10, min = 1, max = 10),
var1_2013 = runif(10, min = 1, max = 10),
var2_2013 = runif(10, min = 1, max = 10))
print(dt1)
id var1_2012 var2_2012 var1_2013 var2_2013
1 A 3.588198 9.611500 9.005854 9.667218
2 B 8.094746 5.080007 7.235231 9.120691
3 C 4.680792 7.098136 6.764561 7.216348
4 D 8.947157 6.153701 9.948428 8.159207
5 E 9.464206 1.926322 6.901352 1.221523
6 F 1.410008 9.098425 7.376774 5.300164
7 G 5.752949 3.214790 5.896594 7.826136
8 H 9.031771 1.378536 6.347278 2.947671
9 I 5.962915 3.951286 3.602438 3.863629
10 J 5.109533 9.590533 2.324023 3.084632
merge.stack
以所需的格式获取它。 var.stubs
是您要保留在列中的变量前缀的向量。 sep
参数指定要使用的分隔符,将变量名称拆分。 dt2 <- splitstackshape::merged.stack(dt1,
id.vars = "id",
var.stubs = c("var1", "var2"),
sep = "_",
keep.all = TRUE)
print(dt2)
id .time_1 var1 var2
1: A 2012 3.588198 9.611500
2: A 2013 9.005854 9.667218
3: B 2012 8.094746 5.080007
4: B 2013 7.235231 9.120691
5: C 2012 4.680792 7.098136
6: C 2013 6.764561 7.216348
7: D 2012 8.947157 6.153701
8: D 2013 9.948428 8.159207
9: E 2012 9.464206 1.926322
10: E 2013 6.901352 1.221523
11: F 2012 1.410008 9.098425
12: F 2013 7.376774 5.300164
13: G 2012 5.752949 3.214790
14: G 2013 5.896594 7.826136
15: H 2012 9.031771 1.378536
16: H 2013 6.347278 2.947671
17: I 2012 5.962915 3.951286
18: I 2013 3.602438 3.863629
19: J 2012 5.109533 9.590533
20: J 2013 2.324023 3.084632