我目前在将大量数据合并到面板数据时遇到了问题。我发现这个解决方案可以帮助我减少"更小的"解决方案:Panel Data但我无法将其应用于更大的"格式。
我将尝试编写一个编码示例: 从包'数据集':
df_1 = WorldPhones # In my case, years 2000-2014 and 43 columns (districts)
df_2 = WorldPhones # In my case, there is different data here
df_3 = WorldPhones # ""
df_4 = WorldPhones # ""
每个数据框包含43个区中每个区的不同值。我给了每个区一个唯一的id(1到43)。 43个区域与数据集WorldPhones中给出的7个区域(大陆)相当。 每个数据框只包含每个区和每年的一个变量。让我们说df_1包含变量X1,df_2包含X2,依此类推。 我希望将这些数据输入" long"格式,有点像这样思考:
Id Year X1 X2 X3 ...
1 1951 45939 21574 2876
1 1956 60423 29990 4708
1 1957 64721 32510 5230
1 1958 68484 35218 6662
1 1959 71799 37598 6856
1 1960 76036 40341 8220
1 1961 79831 43173 9053
2 1951 45939 21574 2876
2 1956 60423 29990 4708
2 1957 64721 32510 5230
2 1958 68484 35218 6662
2 1959 71799 37598 6856
2 1960 76036 40341 8220
2 1961 79831 43173 9053
...
43 1951 45939 21574 2876
43 1956 60423 29990 4708
43 1957 64721 32510 5230
43 1958 68484 35218 6662
43 1959 71799 37598 6856
43 1960 76036 40341 8220
43 1961 79831 43173 9053
不幸的是,我真的不知道如何做到这一点,除了"蛮力"这将是写下来"它下来" 43次。
答案 0 :(得分:2)
使用tidyr
或reshape2
非常简单。恕我直言,每个R用户都应该学会使用这两个包以及data.table
,dplyr
。
library("datasets")
library(reshape2)
library(dplyr)
WorldPhones <- data.frame(WorldPhones) # matrix format to data.frame
WorldPhones$Year <- rownames(WorldPhones) # create Year column
df_1 <- df_2 <- df_3 <- WorldPhones #
# transform to long format using melt from reshape2
df_1 <- melt(df_1, id.vars = "Year", variable.name = "Id", value.name="X")
df_2 <- df_3 <- df_1 # similarly for df_2, df_3.
# merge the datasets using left_join from dplyr
df_1 %>%
left_join(df_2, by=c("Year", "Id")) %>%
left_join(df_3, by=c("Year", "Id")) %>% head
Year Id X.x X.y X
1 1951 N.Amer 45939 45939 45939
2 1956 N.Amer 60423 60423 60423
3 1957 N.Amer 64721 64721 64721
4 1958 N.Amer 68484 68484 68484
5 1959 N.Amer 71799 71799 71799
6 1960 N.Amer 76036 76036 76036
或使用data.table
library("data.table")
dt_1 <- setDT(WorldPhones)
dt_1 <- melt(dt_1, id.vars = "Year", variable.name = "Id", value.name="X")
setkey(dt_1, Year, Id)
dt_2 <- dt_3 <- dt_1
dt_1[dt_2][dt_3]
Year Id X i.X i.X.1
1: 1951 N.Amer 45939 45939 45939
2: 1951 Europe 21574 21574 21574
3: 1951 Asia 2876 2876 2876
4: 1951 S.Amer 1815 1815 1815
5: 1951 Oceania 1646 1646 1646