首页 > 解决方案 > R将当前行条目与下一行条目(在同一列上)进行比较

问题描述

我有类似以下的内容,作为数据框

ID      Date       Bug
3452   02/01/2004  A
3452   02/01/2004  B
6532   06/01/2004  D
8732   09/01/2004  C
3466   20/01/2004  A

我希望遍历整个内容,并首先遍历 ID 列中的每个条目,如果随后两个 ID 相同,那么我希望移动到日期列,并将其与下一行的日期进行比较。我想检查两个日期是否都在 14 天的窗口内。如果是这样,则需要将它们标记为一个实体。

标签: r

解决方案


我们可以将“Date”列转换为Date按“ID”分组的类,通过取diff相邻“Date”之间的erence创建“flag”列并检查它是否小于14

library(dplyr)
library(lubridate)
df1 %>%
   mutate(Date = dmy(Date)) %>%
   group_by(ID) %>%
   mutate(flag = c("No", "Yes")[1 + c(FALSE, diff(Date) < 14)]) %>%
   ungroup

lag或获取当前日期与该日期之间的差异

library(tidyr)
df1 %>%
   mutate(Date = dmy(Date)) %>%
   group_by(ID) %>%
   mutate(flag =  replace_na(as.integer(difftime(Date, lag(Date), units = 'day')) < 14, FALSE)) %>%
   ungroup

数据

df1 <- structure(list(ID = c(3452L, 3452L, 6532L, 8732L, 3466L),
Date = c("02/01/2004", 
"02/01/2004", "06/01/2004", "09/01/2004", "20/01/2004"), Bug = c("A", 
"B", "D", "C", "A")), class = "data.frame", row.names = c(NA, 
-5L))

推荐阅读