我如何通过一个条件(id)过滤两天内重复的行

问题描述 投票:0回答:1

我有一个 df,其中包含 4 列:

  1. 微生物数据(月),
  2. 样本_日期,
  3. 和患者 ID (pid_code),
  4. id(每行)。

它看起来像这样:

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

您有什么建议吗? 谢谢

r date tidyverse amr
1个回答
0
投票

假设您的数据框名为 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)
© www.soinside.com 2019 - 2024. All rights reserved.