【问题标题】:How to select/subset multiple time series data frames in a list with same dates如何在具有相同日期的列表中选择/子集多个时间序列数据框
【发布时间】:2021-11-28 15:52:45
【问题描述】:

我有以下方式的数据框列表:

> 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 的所有数据框,它们具有相同的年份。如何解决这个问题?谢谢。

【问题讨论】:

    标签: r dataframe date merge time-series


    【解决方案1】:

    我们可以使用intersect 即,从list 中提取“Year”列,获取相交的“Year”值,然后执行subset 以获取仅包含“Year”值的行每个 list 元素通过循环使用 listlapply

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

    【讨论】:

    • 嗨,我在 c1 中没有得到任何值。
    • @Sayantan4796 这意味着您在今年的所有列表元素中没有任何共同元素?
    • @Sayantan4796 &gt; years numeric(0) 没有返回任何值。你的预期输出是什么
    猜你喜欢
    • 1970-01-01
    • 2023-03-11
    • 2019-02-10
    • 2020-08-23
    • 2019-09-19
    • 2020-08-14
    • 2018-06-09
    • 2019-06-24
    • 1970-01-01
    相关资源
    最近更新 更多