我有一个关于数据库中有关患者特定数据和重复事件的子集的问题。我有(本质上,显示的表格是简化的)一个数据库,其中包含任何给定患者的记录 ID,以及有关他们的年龄和在医院住院时间 (los) 的信息。此外,我们还收集不良事件的数据(即因医疗干预而对患者造成的伤害)。这些 ae 是重复事件并按原样列出,这意味着任何 ae 都对应于某个患者(记录 ID),并包含有关它是否是 ae 的信息,如果是,它是什么类型的 ae(ae_type,如果是 NA)不是 ae,如果是一个,则对应于某种类型)。因为数据库是这样建立的,所以我们必须填写一个对应不同类型ae的表格,如果表格填写完毕,则显示为重复事件= 1。
记录_id | ae_重复 | ae_类型 | 年龄 | 洛斯 |
---|---|---|---|---|
1 | 不适用 | 不适用 | 25 | 7 |
1 | 1 | 1 | 不适用 | 不适用 |
1 | 1 | 不适用 | 不适用 | 不适用 |
1 | 1 | 不适用 | 不适用 | 不适用 |
2 | 不适用 | 不适用 | 30 | 12 |
2 | 1 | 不适用 | 不适用 | 不适用 |
2 | 1 | 不适用 | 不适用 | 不适用 |
2 | 1 | 1 | 不适用 | 不适用 |
3 | 不适用 | 不适用 | 55 | 14 |
3 | 1 | 1 | 不适用 | 不适用 |
3 | 1 | 1 | 不适用 | 不适用 |
3 | 1 | 不适用 | 不适用 | 不适用 |
现在回答我的实际问题。出于子集化的目的,我需要计算任何给定患者遭受的 ae 数量(即 ae_type != NA),为此我想创建一个新变量,用于计算患者遭受的 ae 数量。有什么办法可以做到吗?
我尝试了使用 dplyr 和 mutate 或 summarize 函数的各种方法,但似乎没有任何效果。
只需按 record_id 列进行分组。另请参阅here了解如何在 stackoverflow 上提出好问题
library(dplyr)
db <- structure(
list(
recor_id = c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3,
3),
ae_repeat = c("NA", "1", "1", "1", "NA", "1", "1", "1", "NA",
"1", "1", "1"),
ae_type = c("NA", "1", "NA", "NA", "NA", "NA",
"NA", "1", "NA", "1", "1", "NA"),
age = c(
"25",
"NA",
"NA",
"NA",
"30",
"NA",
"NA",
"NA",
"55",
"NA",
"NA",
"NA"
),
los = c("7",
"NA", "NA", "NA", "12", "NA", "NA", "NA", "14", "NA", "NA", "NA")
),
class = c("tbl_df", "tbl", "data.frame"),
row.names = c(NA,-12L)
)
new_db <-
db %>% group_by(recor_id) %>% mutate(n_ae = length(unique(ae_type[!is.na(ae_type)])))