我有一个数据框列表,我需要将它们组合成一个数据框。
year<-1990:2000
v1<-1:11
v2<-20:30
df1<-data.frame(year,v1)
df2<-data.frame(year,v2)
ldf<-list(df1,df2)
我现在想要取消列出这个数据框并获取
> head(df)
year v1 v2
1 1990 1 20
2 1991 2 21
3 1992 3 22
4 1993 4 23
请注意,我的问题与类似问题中提供的解决方案不同,其中该问题的解决方案是:`df&lt; - ldply(ldf,data.frame)
因为我实际上正在寻找的是一种更自动的方式:df<-merge(df1,df2, by="year")
答案 0 :(得分:2)
是否有任何问题:
df <- merge(ldf[[1]], ldf[[2]], by="year")
或者是一长串清单:
df1 <- ldf[[1]]
for (x in 2:length(ldf)) {
df1 <- merge(df1, ldf[[x]])
}
# year v1 v2
# 1 1990 1 20
# 2 1991 2 21
# 3 1992 3 22
# 4 1993 4 23
# 5 1994 5 24
# 6 1995 6 25
# 7 1996 7 26
# 8 1997 8 27
# 9 1998 9 28
# 10 1999 10 29
# 11 2000 11 30
答案 1 :(得分:2)
有更多list
元素,方便的选项是reduce
,其中一个连接函数
library(tidyverse)
ldf %>%
reduce(inner_join, by = "year")
# year v1 v2
#1 1990 1 20
#2 1991 2 21
#3 1992 3 22
#4 1993 4 23
#5 1994 5 24
#6 1995 6 25
#7 1996 7 26
#8 1997 8 27
#9 1998 9 28
#10 1999 10 29
#11 2000 11 30