r - 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 天的窗口内。如果是这样,则需要将它们标记为一个实体。
解决方案
我们可以将“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))
推荐阅读
- sql - 句号错误应该在别名和句号之间?
- arrays - Excel空白单元格引用在其旁边添加单元格两次
- string - 字母表的排列最小化子序列的数量来构造一个字符串
- java - 每次我更改数据时都会通知垃圾邮件
- aws-lambda - AWSLambdaInternal 上传的文件必须是非空 zip InvalidParameterValueException
- python - 如何在 Tkinter 笔记本选项卡上添加悬停效果?
- python - Python Selenium 意外搜索元素外
- java - 为什么列表列表不能添加动物?
- android - 如何在 RelativeLayout 中的 LinearLayout 之上获取 ImageView
- javascript - 用户向上滚动时隐藏动画箭头