基于长格式重复测量数据,按ID统计Event次数并生成指定频次表
重复测量数据的Event频次统计实现
方法1:Base R 实现
先按ID分组计算每个个体的Event发生总次数,再统计不同总次数对应的个体数量:
# 计算每个ID的Event总次数 id_event_sum <- aggregate(Event ~ ID, data = df, sum) # 统计0、1、2次Event的个体数(强制包含所有可能取值) freq_table <- table(factor(id_event_sum$Event, levels = 0:2)) # 转换为目标单行表格格式 result <- data.frame(t(as.data.frame(freq_table))) colnames(result) <- 0:2 rownames(result) <- "" # 查看结果 result
运行后输出的表格如下:
| 0 | 1 | 2 | |
|---|---|---|---|
| 1 | 2 | 1 |
方法2:dplyr + tidyr 实现
用tidyverse工具链更简洁地完成统计和格式转换:
library(dplyr) library(tidyr) df %>% # 按ID分组,计算每个个体的Event总次数 group_by(ID) %>% summarise(total_event = sum(Event), .groups = "drop") %>% # 强制包含0、1、2三个取值,避免缺失 mutate(total_event = factor(total_event, levels = 0:2)) %>% # 统计每个总次数对应的个体数 count(total_event) %>% # 转换为宽格式 pivot_wider(names_from = total_event, values_from = n, values_fill = 0) %>% # 调整行名和列名,匹配目标格式 mutate(rowname = "") %>% relocate(rowname) %>% column_to_rownames("rowname")
这段代码同样会输出符合要求的单行频次表。
内容的提问来源于stack exchange,提问作者Jacob White
相关产品推荐
相关产品推荐

