我有一个 df,其中包含 4 列:
它看起来像这样:
id | 莫 | 样本_日期 | pid_代码 |
---|---|---|---|
1 | 表皮葡萄球菌 | 2019-12-13 | 120 |
2 | 表皮葡萄球菌 | 2019-12-14 | 120 |
3 | 头状葡萄球菌 | 2020-01-13 | 131 |
4 | 人葡萄球菌 | 2021-11-14 | 155 |
5 | 人葡萄球菌 | 2021-11-17 | 155 |
6 | 藤黄微球菌 | 2023-06-06 | 133 |
7 | 藤黄微球菌 | 2023-06-07 | 133 |
我想过滤那些 pid_code 和 mo 相同的行,并在 2 天内重复。
所以我想取回这些行。
id | 莫 | 样本_日期 | pid_代码 |
---|---|---|---|
1 | 表皮葡萄球菌 | 2019-12-13 | 120 |
2 | 表皮葡萄球菌 | 2019-12-14 | 120 |
6 | 藤黄微球菌 | 2023-06-06 | 133 |
7 | 藤黄微球菌 | 2023-06-07 | 133 |
您有什么建议吗? 谢谢
假设您的数据框名为 df。现在将
sample_date
转换为日期:
df$sample_date <- as.Date(df$sample_date)
按pid_code、mo、sample_date排列数据框:
df <- df %>%
arrange(pid_code, mo, sample_date)
计算同一组内连续行之间的时间差:
df <- df %>%
group_by(pid_code, mo) %>%
mutate(time_diff = sample_date - lag(sample_date)) %>%
ungroup()
过滤时间差小于或等于2的行:
filtered_df <- df %>%
filter(as.numeric(time_diff) <= 2 | is.na(time_diff)) %>%
select(-time_diff)