繁体   English   中英

将日期汇总到不同的组中

[英]Summarize Dates into Varying Groups

我有一个提供杂项日期的变量。 我想总结一下这些,以便在将它们用于预测模型之前将它们分解。

我想按以下方式对日期进行分组:

  • 今年(本日历年)
  • 去年
  • 3 年多以前

我对 R 很陌生,因此非常感谢您对此的任何帮助。 谢谢

正如其他评论者所指出的,您没有提供任何数据或可重复的示例,但无论如何让我们试一试。

我将使用两个 tidyverse 包dplyrlubridate来帮助我们。

出于目前的目的,让我们首先生成一些随机日期并将它们放入数据框/tibble 中。 正如 Gregor 上面指出的那样,我假设您的日期已经在正确类的数据框中。

data <- tibble(date = sample(seq(as.Date('2015-01-01'), as.Date('2020-12-31'), by="day"), 50))

现在让我们使用dplyrlubridate将日期重新编码为一个新变量date_group

data %>%
  mutate(date_group = factor(
    case_when(
      year(date) == year(today()) ~ "This Year",
      year(date) == year(today()) - 1 ~ "Last Year",
      year(date) < today() - years(3) ~ "Over 3 Years Ago",
      TRUE ~ "Other"
    )
  ))

对于前两组,我们将使用lubridate函数year() (从日期中提取年份)应用于datadate列,并将其与从今天日期提取的年份(使用today() )进行比较。

对于 3 年前的日期,我们使用years()从今天的日期减去 3 年(注意这与今年和去年基于日历年的计算不同years()

当然,这会为少于 3 年前但多于 1 个日历年前的日期留下空白。 我们在case_when函数中有一个默认选项,将其指定为“其他”。

我们将case_when函数的结果包装在factor()以便将结果组视为一个因子,而不是准备好进行后续建模的字符串。

如果您只有几个类别,则case_when函数很有用(并且易于阅读)。 太多了,它变得太乱了,你应该考虑另一种方法来重组你的数据。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM