r-如何在具有相同日期的列表中选择/子集多个时间序列数据帧



我有一个数据帧列表,格式如下:

> Year<- c(1984, 1999, 2002, 2005, 2010)
> Val <- c(2,1,4,5,4)
> df1 <- cbind.data.frame(Year, Val)
> df1
Year Val
1 1984   2
2 1999   1
3 2002   4
4 2005   5
5 2010   4
> Year<- c(1934, 1989, 2012, 2015, 2000)
> Val <- c(1,5,3,2,1)
> df2 <- cbind.data.frame(Year, Val)
> df2
Year Val
1 1934   1
2 1989   5
3 2012   3
4 2015   2
5 2000   1
> Year <- c(1984, 1999, 2002, 2005, 2010)
> Val <- c(5,7,8,3,4.5)
> df3 <- cbind.data.frame(Year, Val)
> df3
Year Val
1 1984 5.0
2 1999 7.0
3 2002 8.0
4 2005 3.0
5 2010 4.5
> c <- list(df1, df2, df3)
> c
[[1]]
Year Val
1 1984   2
2 1999   1
3 2002   4
4 2005   5
5 2010   4
[[2]]
Year Val
1 1934   1
2 1989   5
3 2012   3
4 2015   2
5 2000   1
[[3]]
Year Val
1 1984 5.0
2 1999 7.0
3 2002 8.0
4 2005 3.0
5 2010 4.5

对于我的任务,我想从列表c中选择具有相同Year值的数据帧。所以,在另一个列表中,比如d,我有来自列表c的所有具有相同年份的数据帧。如何处理这个问题?非常感谢。

我们可以使用intersect,即从list中提取'Year'列,获得相交的'Year'值,然后执行subset,通过使用lapplylist上循环来获得每个list元素中仅具有'Year's'值的行

years <- Reduce(intersect, lapply(c, `[[`, 'Year'))
c1 <- lapply(c, subset, subset = Year %in% years)

最新更新