我有一个数据集,其中每一行都由一个住院ID标识.每一行包含关于住院ID、发生住院的医院ID以及给定住院的入院日期和出院日期的信息.

我想知道,对于每一次住院,在特定住院开始前30天内在发生住院的特定医院内结束的所有其他住院的ID.

以下是在两家医院进行的6次住院治疗的简单例子.

library("tidyverse")

df <- data.frame(hospitalization_id = c(1, 2, 3, 
                                        4, 5, 6),
                 hospital_id = c("A", "A", "A", 
                                 "B", "B", "B"),
                 date_start = as.Date(c("2000-01-01", "2000-01-12", "2000-01-20",
                                        "2000-02-10", "2000-02-12", "2000-02-12")),
                 date_end = as.Date(c("2000-01-03", "2000-01-18", "2000-01-22",
                                      "2000-02-11", "2000-02-14", "2000-01-17")))

我在每次住院治疗开始前的30天间隔内创建了日期.

df_with_date_range <- df %>%
  mutate(date_range1 = date_start - 31,
         date_range2 = date_start - 1)

我正在try 编写一个代码,该代码添加一个列,其中包含在这30天间隔范围内发生的所有住院治疗.我想要的输出如下:

df_final <- df_with_date_range %>%
  filter(hospitalization_id == 3) %>%
  bind_rows(df_with_date_range) %>%
  arrange(hospitalization_id) %>%
  mutate(hospitalization_id_in_range = c(NA, 1, 1, 2, NA, 4, 4))

在A医院:

  • 在住院前的30天内没有住院1
  • 住院1发生在住院2之前的30天内
  • 住院1和住院2发生在住院前30天内3

在B医院:

  • 住院前30天内没有住院4
  • 住院4发生在住院前30天内5
  • 住院4发生在住院前30天内6

推荐答案

一个涉及原始数据帧过滤和between函数的整洁解决方案:

df_with_date_range %>%
  mutate(hospital_id_in_range = pmap(list(date_range1, date_range2, hospital_id),
                   function(x, y, z) ungroup(filter(rowwise(df_with_date_range),
                                                 between(date_start, x, y),
                                                 hospital_id == z))$hospitalization_id)) %>%
  unnest(hospital_id_in_range, keep_empty = TRUE)

# # A tibble: 7 × 7
#   hospitalization_id hospital_id date_start date_end   date_range1 date_range2 hospital_id_in_range
#                <dbl> <chr>       <date>     <date>     <date>      <date>                     <dbl>
# 1                  1 A           2000-01-01 2000-01-03 1999-12-01  1999-12-31                    NA
# 2                  2 A           2000-01-12 2000-01-18 1999-12-12  2000-01-11                     1
# 3                  3 A           2000-01-20 2000-01-22 1999-12-20  2000-01-19                     1
# 4                  3 A           2000-01-20 2000-01-22 1999-12-20  2000-01-19                     2
# 5                  4 B           2000-02-10 2000-02-11 2000-01-10  2000-02-09                    NA
# 6                  5 B           2000-02-12 2000-02-14 2000-01-12  2000-02-11                     4
# 7                  6 B           2000-02-12 2000-01-17 2000-01-12  2000-02-11                     4

R相关问答推荐

R中具有gggplot 2的Likert图,具有不同的排名水平和显示百分比

如何对数据集进行逆向工程?

r—绘制相交曲线

隐藏e_mark_line的工具提示

计算满足R中条件的连续列

Select 季度月值

为什么我使用geom_density的绘图不能到达x轴?

R -在先前group_by级别汇总时获取最大大小子组的计数

为左表中的所有行使用值Fill滚动左连接

KM估计的差异:SvyKm与带权重的调查

如何从向量构造一系列双边公式

如何创建累加到现有列累计和的新列?

以不同于绘图中元素的方式对GG图图例进行排序

如何提取R中其他字符串和数字之间的字符串?

使用geom_sf跨越日期线时的闭合边界

使用R、拼图和可能的网格包绘制两个地块的公共垂直线

如果极点中存在部分匹配,则替换整个字符串

将某个阈值以下的列中的值分类到不同的列中,否则保持该列的原样

如何根据顺序/序列从数据框中排除值

使用另一列中的增长率外推R(使用dplyr)