这是我正在使用的数据集的示例

library(tidyverse)

id <- c(1,1,1,2,2,2,3,3,4)
date <- c("2020-01-01","2020-02-04", "2021-06-08","2022-05-08","2021-08-09","2021-11-29","2020-04-12", "2022-09-12", "2022-09-22")

df <- data.frame(id,date)

# A tibble: 9 × 2
     id date      
  <dbl> <chr>     
1     1 2020-01-01
2     1 2020-02-04
3     1 2021-06-08
4     2 2022-05-08
5     2 2021-08-09
6     2 2021-11-29
7     3 2020-04-12
8     3 2022-09-12
9     4 2022-09-22

我想按ID值对这些观察结果进行分组,并查看日期,以根据彼此相隔90天的天数分配另一个ID,如下所示

# A tibble: 9 × 3
     id date       ep_id
  <dbl> <chr>      <dbl>
1     1 2020-01-01     1
2     1 2020-02-04     1
3     1 2021-06-08     2
4     2 2022-05-08     2
5     2 2021-08-09     1
6     2 2021-11-29     2
7     3 2020-04-12     1
8     3 2022-09-12     2
9     4 2022-09-22     1

我不能绞尽脑汁go 做这件事.我需要能够添加EP_ID从1:N取决于有多少日期落在90天内彼此.

推荐答案

我们可能会这样做

library(dplyr)
df %>% 
  mutate(date = as.Date(date), rn = row_number()) %>%
  arrange(id, date) %>% 
  group_by(id) %>%
  mutate(ep_id = cumsum(c(1, diff(date) > 90))) %>%
  ungroup %>%
  arrange(rn) %>%
  select(-rn)

-输出

# A tibble: 9 × 3
     id date       ep_id
  <dbl> <date>     <dbl>
1     1 2020-01-01     1
2     1 2020-02-04     1
3     1 2021-06-08     2
4     2 2022-05-08     3
5     2 2021-08-09     1
6     2 2021-11-29     2
7     3 2020-04-12     1
8     3 2022-09-12     2
9     4 2022-09-22     1

R相关问答推荐

如何直接从R中的风险分数计算c指数?

在RStudio中堆叠条形图和折线图

如何写商,水平线,在一个单元格的表在R

为了网络分析目的,将数据框转换为长格式列联表

R-按最接近午夜的时间进行筛选

R中有约束的优化问题:如何用复数和对数效益函数解决问题?

R -如何分配夜间GPS数据(即跨越午夜的数据)相同的开始日期?

R如何将列名转换为更好的年和月格式

停止ggplot将多行减少到一行

将多个变量组合成宽格式

如何在R中创建这些列?

将数据从一列转换为按组累计计数的单个虚拟变量

图中显示错误 colored颜色 的图例geom_sf

在使用ggplot2的情况下,如何在使用coord_trans函数的同时,根据未转换的坐标比来定位geom_瓷砖?

从字符串01JAN2021创建日期

Data.table条件合并

PIVOT_WIDTER in R,以从三列获得距离矩阵

R获得所有可能的多个最优解

组合预定义美学(Ggplot2)

iGraph中的最大Jaccard相似度