【问题标题】:keep columns after summarising using tidyverse in R在 R 中使用 tidyverse 进行汇总后保留列
【发布时间】:2020-12-17 16:36:19
【问题描述】:

我有一个由具有年、月和日值的组组成的数据集。我想在 R 中使用 tidyverse 过滤组,以便我找到时间序列中的最新月份。这是一些示例代码。

dat = expand.grid(group = seq(1,5),year = seq(2016,2020),month=seq(1:12))
dat = dat[order(dat$group,dat$year,dat$month),]
dat$days=sample(seq(0,30),nrow(dat),replace=TRUE)
dat$year[dat$year==2020 & dat$month==12] = NA
dat = dat[complete.cases(dat),]

在此示例中,有 5 个组具有 2016 年至 2020 年的月度数据。但是,我们假设 12 月组缺失。此外,数据集中缺少某些日期

我可以从 2019 年开始获取 12 月,但不确定如何在摘要中包含天数并按月的天数进行过滤。例如,

a = dat %>%
  group_by(group,month) %>%
  summarise(year = max(year))

获取年份,但我想在月份和年份中添加正确的日期。有谁知道如何保留天数列?我不想平均或得到最小值或任何东西。

【问题讨论】:

    标签: r tidyverse


    【解决方案1】:

    我们可以使用slice_max 根据max 每个分组块的“年份”值返回整行

    library(dplyr)
    dat %>%
      group_by(group, month) %>%
      slice_max(year)
    

    【讨论】:

    • 谢谢。我刚刚意识到我也可以使用filter(year ==max(year)) 而不是summarise
    • @user44796 如果有最长年份的联系,则会有所不同。 filter 将获取所有这些重复的行,而 slice 仅返回第一行
    • 很高兴知道。我从未使用过slice 函数。
    猜你喜欢
    • 2022-07-21
    • 2016-12-29
    • 1970-01-01
    • 2018-11-14
    • 2020-06-18
    • 1970-01-01
    • 2021-08-23
    • 2016-06-03
    • 1970-01-01
    相关资源
    最近更新 更多