如何根据R中的日期从重复数据创建聚合数据



我在R中有纵向患者数据。我想从表1创建一个聚合表,如下面的表2。因此,表2对于每个患者只有一行,并且具有登记日期之前的咨询总数(表1中的第3列(和登记日期之后的咨询总数

表1:

12018年7月07日
patid consultation_date registration_date consultation_count
1 2016年7月 2018年7月
1 2019年7月7日 2018年07月7日 1
1 2020年7月7日1
2 2016年8月14日 2016年9月7日 1
2 2015年5月7日 2016年9月7日 1
2 2016年12月2日 2016月9日 1

在使用tidyverse时与akrun类似,但方法略有不同:

library(dplyr)
library(tidyr)
consultations  |>
mutate(period = ifelse(
registration_date <= consultation_date, 
"after registration",
"before registration"
)
)  |>
group_by(patid, period)  |>
summarise(n = n())  |>
pivot_wider(
names_from = period, 
values_from = n
)
# A tibble: 2 x 3
# Groups:   patid [2]
#   patid `after registration` `before registration`
#   <int>                <int>                 <int>
# 1     1                    2                     1
# 2     2                    1                     2

数据

consultations  <- read.table(text = "patid  consultation_date   registration_date   consultation_count
1   07/07/2016  07/07/2018  1
1   07/07/2019  07/07/2018  1
1   07/07/2020  07/07/2018  1
2   14/08/2016  07/09/2016  1
2   07/05/2015  07/09/2016  1
2   02/12/2016  07/09/2016  1", h=T)

我们可以将"date"转换为Date类,然后按"patid"分组,从"consultation_date"one_answers"registration_date"中获得逻辑向量的sum

library(dplyr)
library(lubridate)
df1 %>%
mutate(across(ends_with('date'), dmy)) %>%
group_by(patid) %>%
summarise(
count_pre = sum(consultation_date < registration_date, na.rm = TRUE),
count_post = sum(consultation_date > registration_date, na.rm = TRUE), 
.groups = 'drop')

-输出

# A tibble: 2 × 3
patid count_pre count_post
<int>     <int>      <int>
1     1         1          2
2     2         2          1

数据

df1 <- structure(list(patid = c(1L, 1L, 1L, 2L, 2L, 2L), 
consultation_date = c("07/07/2016", 
"07/07/2019", "07/07/2020", "14/08/2016", "07/05/2015", "02/12/2016"
), registration_date = c("07/07/2018", "07/07/2018", "07/07/2018", 
"07/09/2016", "07/09/2016", "07/09/2016"), consultation_count = c(1L, 
1L, 1L, 1L, 1L, 1L)), class = "data.frame", row.names = c(NA, 
-6L))

相关内容

  • 没有找到相关文章

最新更新