取消并合并到r中的单个数据帧中

时间:2018-02-23 21:17:29

标签: r list dataframe merge

我有一个数据框列表,我需要将它们组合成一个数据框。

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")

2 个答案:

答案 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