我正在使用 Rmarkdown/Quarto 编写一份报告进行研究/试验。我想生成一个事件表来总结:
数据包含每个事件的一行,并且每个 ID 可能有多个事件。
这是一个需要解释的最小数据集:
set.seed(111)
dt <- data.frame(id = rep(c(1:10), each=2),
# serious = sample(c("Yes","No"), 20, replace = TRUE),
type = sample(c("A", "B", NA), 20, replace = TRUE, prob = c(.4, .4, .2)))
所需的桌子有:
活动类型 | 事件的唯一 ID 数量 | 事件中唯一 ID 的比例 | 活动总数 |
---|---|---|---|
任何活动 | |||
活动“A” | |||
活动“B” | |||
活动“C” |
我尝试使用
dplyr
技术来 group_by() |> summarize
(见下文),我可以接近一些表格单元格,但很难获得干净的输出并转换为我希望的格式。
dt |>
group_by(type) |>
summarize(unique_ids = n_distinct(id))
# This does seem to give the correct counts of unique IDs for each
# type and accounts for an ID having more than one "A" for example
# But does not give overall event row, can't figure out proportion of IDs, etc.
上面的代码似乎确实给出了每种类型(A/B/NA)的唯一 ID 的正确计数,并且例如考虑了具有多个“A”的 ID。但它没有给出整体事件行,我无法计算出ID的比例、事件总数(ID可以有多个)等
对于报告中的其他表,我使用了
tbl_summary
中的 gtsummary
函数,但对于这些数据,相同的 ID 可以位于多行中,我认为该包无法正确处理此类数据。
欢迎任何想法或建议!
您可以执行以下操作:
f <- \(d) summarize(d, ids=n_distinct(id),prop_ids = ids/n_distinct(d$id), n = n())
bind_rows(
f(dt) %>% mutate(type="Any"),
f(group_by(dt,type))
)
输出:
ids prop_ids n type
1 10 1.0 20 Any
2 8 0.8 10 A
3 8 0.8 9 B
4 1 0.1 1 <NA>