如何 select/subset 列表中具有相同日期的多个时间序列数据框
How to select/subset multiple time series data frames in a list with same dates
我有一个数据框列表,格式如下:
> 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
对于我的作业,我想要 select 列表 c
中的数据帧,具有相同的 Year
值。因此,在另一个列表中,假设 d
我拥有列表 c
中具有相同年份的所有数据框。如何解决这个问题?谢谢。
我们可以使用 intersect
,即从 list
中提取 'Year' 列,获取相交的 'Year' 值,然后执行 subset
通过使用 lapply
遍历 list
来获取每个 list
元素中仅具有 'Year' 值的行
years <- Reduce(intersect, lapply(c, `[[`, 'Year'))
c1 <- lapply(c, subset, subset = Year %in% years)
我有一个数据框列表,格式如下:
> 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
对于我的作业,我想要 select 列表 c
中的数据帧,具有相同的 Year
值。因此,在另一个列表中,假设 d
我拥有列表 c
中具有相同年份的所有数据框。如何解决这个问题?谢谢。
我们可以使用 intersect
,即从 list
中提取 'Year' 列,获取相交的 'Year' 值,然后执行 subset
通过使用 lapply
list
来获取每个 list
元素中仅具有 'Year' 值的行
years <- Reduce(intersect, lapply(c, `[[`, 'Year'))
c1 <- lapply(c, subset, subset = Year %in% years)