我的数据如下所示。 有些人可能在 4 年内进行了多达 48 次观察。 我希望根据日期范围获得具体总数。
Name <- c("Doe, John","Doe, John","Doe, John", "Doe, Jane", "Doe, Jane","Doe, Jane", "Doe, Jane")
Accession <- c(123, 234, 345, 456, 567, 678, 789)
MRN <-c(55555, 55555, 55555, 66666, 66666, 66666, 66666)
Collected <-c("2022-01-05", "2022-01-06", "2022-01-07", "2022-01-08", "2022-01-09", "2022-01-20", "2022-01-15")
Result <-c("Detected", "Negative", "Detected", "Negative", "Negative", "Negative", "Detected")
CV <- data.frame(Name, Accession, MRN, Collected, Result)
Name Accession MRN Collected Result
1 Doe, John 123 55555 2022-01-05 Detected
2 Doe, John 234 55555 2022-01-06 Negative
3 Doe, John 345 55555 2022-01-07 Detected
4 Doe, Jane 456 66666 2022-01-08 Negative
5 Doe, Jane 567 66666 2022-01-09 Negative
6 Doe, Jane 678 66666 2022-01-20 Negative
我想根据 MRN 计算数据框中任何“收集”日期的 +/- 1 天和 +/- 2 天的观察结果。 我希望我的输出看起来像这样
Name MRN +/-1day_Number_of_Tests +/-2days_Number_of_Tests
Doe, John 55555 3 2
Doe, Jane 66666 3 2
这个问题有点不清楚,但根据我的解释,这个解决方案应该有效。此外,我还更改了迄今为止收集的向量的类型。
Name <- c("Doe, John","Doe, John","Doe, John", "Doe, Jane", "Doe, Jane","Doe, Jane", "Doe, Jane")
Accession <- c(123, 234, 345, 456, 567, 678, 789)
MRN <-c(55555, 55555, 55555, 66666, 66666, 66666, 66666)
Collected <- as.Date(c("2022-01-05", "2022-01-06", "2022-01-07", "2022-01-08", "2022-01-09", "2022-01-20", "2022-01-15"), tz = 'America/New_York')
Result <-c("Detected", "Negative", "Detected", "Negative", "Negative", "Negative", "Detected")
CV <- data.frame(Name, Accession, MRN, Collected, Result)
library(tidyverse)
CV %>%
group_by(Name, MRN) %>%
summarise(
day_1 = sum(between(Collected, Collected - 1, Collected + 1), na.rm = TRUE),
day_2 = sum(between(Collected, Collected - 2, Collected + 2), na.rm = TRUE)
) %>%
ungroup()