使用r中我的时间序列每个月的最后一天



我只需要使用数据集中最后一天可用的数据进行聚合,但是我没有成功…

library(tibbletime)

dataset <- data.frame(
timestamp = c("2010-01-01", "2010-01-03", "2010-01-23")
var =       c( 1,             4,            11)
)
monthly_dataset <- as_tbl_time(dataset, index = timestamp) %>%
as_period("1 month") 

我如何使用一些函数或R包来聚合我的数据集,只使用最近可用的一天?

Julian的回答是一个很好的开始,但它不能跨多年工作,因为分组变量不包括年份信息。

执行此操作的典型方法是按年-月分组,然后按年-月组筛选到最大日期。

另外,作为tibbletime的创建者,我强烈建议您不要再使用它。它已被弃用并且不再被支持。您应该使用clock/润滑油来处理日期,以及像dplyr这样的tidyverse包,或者如果您真的需要在时间序列上投入全部精力,您应该使用table。

library(lubridate)
library(dplyr)
dataset <- tibble(
timestamp = c(
"2010-01-01", "2010-01-03", "2010-01-23", 
"2010-02-01", "2010-02-03", "2011-02-23"
),
var = c(1, 4, 11, 1, 4, 11)
)
dataset <- mutate(dataset, timestamp = ymd(timestamp))
dataset <- dataset %>%
mutate(
year_month = floor_date(timestamp, "month"),
day = day(timestamp)
)
dataset %>%
group_by(year_month) %>%
filter(day == max(day)) %>%
ungroup()
#> # A tibble: 3 × 4
#>   timestamp    var year_month   day
#>   <date>     <dbl> <date>     <int>
#> 1 2010-01-23    11 2010-01-01    23
#> 2 2010-02-03     4 2010-02-01     3
#> 3 2011-02-23    11 2011-02-01    23

在2022-05-18由reprex包(v2.0.1)创建

选项可以是lubridate包,例如

library(lubridate)
library(dplyr)
dataset <- data.frame(
timestamp = c("2010-01-01", "2010-01-03",
"2010-01-23", "2010-02-01", "2010-02-03", "2010-02-23"),
var = c(1, 4, 11, 1, 4, 11)
)


dataset %>%
mutate(month = timestamp %>% ymd() %>% month()) %>%
group_by(month) %>%
slice_tail()

结果:

# A tibble: 2 x 3
# Groups:   month [2]
timestamp    var month
<chr>      <dbl> <dbl>
1 2010-01-23    11     1
2 2010-02-23    11     2

相关内容

  • 没有找到相关文章

最新更新