寻找一种简单的方法来查找跨 ID 的事件的累积和聚合计数,其中一个 ID 可能有一个或多个事件

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

我正在使用 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 可以位于多行中,我认为该包无法正确处理此类数据。

欢迎任何想法或建议!

r tidyverse gtsummary
1个回答
0
投票

您可以执行以下操作:

  1. 制作小助手功能:
f <- \(d) summarize(d, ids=n_distinct(id),prop_ids = ids/n_distinct(d$id), n = n())
  1. 将该功能应用于总框架和框架的分组版本,并绑定在一起:
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>
© www.soinside.com 2019 - 2024. All rights reserved.