【问题标题】:dplyr - Get last value for each yeardplyr - 获取每年的最后一个值
【发布时间】:2015-05-17 14:05:37
【问题描述】:

我有一个看起来像这样的 tbl_df:

> d
Source: local data frame [3,703 x 3]

         date  value year
1  2001-01-01 0.1218 2001
2  2001-01-02 0.1216 2001
3  2001-01-03 0.1216 2001
4  2001-01-04 0.1214 2001
5  2001-01-05 0.1214 2001
..        ...    ...  ...

日期范围跨越数年。

我想获得value 每年的最新值(并非始终如一的 31-12)。有没有办法使用诸如d %>% group_by(year) %>% summarise(...) 之类的成语来做到这一点?

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    这里有一些选项

    library(dplyr)
    d %>% 
      group_by(year) %>%
      summarise(value=last(value))
    

    或者可能是(描述不是很清楚)

    d %>% 
      group_by(year) %>%
      slice(which.max(date)) %>%
      select(value) 
    

    或者

    d %>%
      group_by(year) %>%
      filter(date==max(date)) %>%
      select(value)
    

    或者我们可以使用arrange来订购“日期”(如果没有订购)并获取last

    d %>%
      group_by(year) %>%
      arrange(date) %>%
      summarise(value=last(value))
    

    如果你想试试data.table,这里有一个

    library(data.table)
    setDT(d)[, value[which.max(date)], year]
    

    或者正如@David Arenburg 评论的那样

     unique(setDT(d)[order(-date)], by = "year")
    

    【讨论】:

    • @DavidArenburg 太搞笑了real men :-)
    • @DavidArenburg 你的意思是setorder(setDT(d), year, date)[, value[which.max(date)], year]
    猜你喜欢
    • 2017-07-28
    • 1970-01-01
    • 2022-09-23
    • 2020-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-10
    • 1970-01-01
    相关资源
    最近更新 更多