如何使用 R 获取基于 ID 和日期范围执行的测试总数?

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

我的数据如下所示。 有些人可能在 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

r count summarize mutate tally
1个回答
0
投票

这个问题有点不清楚,但根据我的解释,这个解决方案应该有效。此外,我还更改了迄今为止收集的向量的类型。

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()
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.