r - 给定类型 min_date 和 max_date 的聚合 ID 随时间变化
问题描述
我试图通过时间按类型聚合日期,考虑到每个时间间隔的本地min_date和max_date在整个时间段内发生的变化。
id type date
1 A 2019-01-01
1 A 2019-01-02
1 B 2019-01-03
1 B 2019-01-04
2 A 2019-01-01
2 A 2019-01-02
2 B 2019-01-03
2 A 2019-01-04
代码:
df <- data.frame(id = c(1, 1, 1, 1, 2, 2, 2, 2), type = c("A", "A", "B", "B", "A", "A", "B", "C"), date = as.Date(c("2019-01-01", "2019-01-02", "2019-01-03", "2019-01-04", "2019-01-01", "2019-01-02", "2019-01-03", "2019-01-04"), "%Y-%m-%d"))
我试图得到的结果:
id type min_date max_date
1 A 2019-01-01 2019-01-02
1 B 2019-01-03 2019-01-04
2 A 2019-01-01 2019-01-02
2 B 2019-01-03 2019-01-03
2 A 2019-01-04 2019-01-04
我厌倦了下面的代码,但它只显示了全局min_date和max_date - 不考虑随时间的变化:
library(dplyr)
df_changes <- df %>% group_by(id, type) %>% summarise(listings = n(), min_date = min(date), max_date = max(date))
解决方案
你可以做:
df %>%
group_by(rleid = with(rle(type), rep(seq_along(lengths), lengths))) %>%
summarise(min_date = min(date),
max_data = max(date),
id = first(id),
type = first(type)) %>%
ungroup() %>%
select(-rleid)
min_date max_data id type
<date> <date> <dbl> <chr>
1 2019-01-01 2019-01-02 1 A
2 2019-01-03 2019-01-04 1 B
3 2019-01-01 2019-01-02 2 A
4 2019-01-03 2019-01-03 2 B
5 2019-01-04 2019-01-04 2 C
或者:
df %>%
group_by(rleid = with(rle(type), rep(seq_along(lengths), lengths)), id, type) %>%
summarise(min_date = min(date),
max_data = max(date)) %>%
ungroup() %>%
select(-rleid)
样本数据:
df <- data.frame(id = c(1, 1, 1, 1, 2, 2, 2, 2), type = c("A", "A", "B", "B", "A", "A", "B", "C"), date = as.Date(c("2019-01-01", "2019-01-02", "2019-01-03", "2019-01-04", "2019-01-01", "2019-01-02", "2019-01-03", "2019-01-04"), "%Y-%m-%d"),
stringsAsFactors = FALSE)
推荐阅读
- midi - 如何从 Aksequencer 收听 midi 事件
- css - 我想用 css 重新创建一个计算器键盘
- notepad++ - 在记事本++中剪切并粘贴到特定的列行
- powershell - VSCode 新手,无法禁用侧边栏
- python - 如何使用 Flask 和 Sqalchemy 自动创建数据库表和模式?
- c# - c# editorconfig CA1062空值检查验证方法(用于保护子句)具有可为空的引用类型
- azure-devops - 管道中的 Azure DevOps 链接工作项
- java - 如何获取我存储在 Java 对象中的变量的已知值?
- datatable - 在powerapps中对同一列使用具有多个值的过滤器函数
- c# - C#如何递归搜索类型为x的对象