R语言:生成数据框中org与Abx组合的0/1统计表格求助
解决方法
先模拟符合你描述的数据结构(如果你的数据列名不同,自行调整):
library(tidyverse) # 模拟包含微生物、抗生素类别、结果(0/1)的数据框 set.seed(123) df <- tibble( org = sample(c("acito", "Hemop", "Ecoli", "Klebsi"), 100, replace = TRUE), `Abx. class` = sample(c("Penicillins", "Aminoglycosides", "Trimethoprim", "Carbapenems"), 100, replace = TRUE), result = sample(c(0, 1), 100, replace = TRUE) )
步骤1:生成所有微生物-抗生素类别组合
用tidyr::crossing生成所有唯一的组合,确保没有遗漏:
all_combinations <- df %>% distinct(org, `Abx. class`) %>% crossing(org, `Abx. class`)
步骤2:统计每个组合的0/1出现次数
结合dplyr::count和tidyr::pivot_wider完成统计,并用right_join确保所有组合都被纳入:
final_table <- df %>% # 统计原数据中每个组合的0/1次数 count(org, `Abx. class`, result) %>% # 转换为宽格式,把0和1作为列 pivot_wider( names_from = result, values_from = n, values_fill = 0 ) %>% # 关联所有组合,确保没有数据的组合也被保留 right_join(all_combinations, by = c("org", "Abx. class")) %>% # 把缺失值替换为0(表示该组合没有对应结果) mutate(across(c(`0`, `1`), ~replace_na(., 0)))
运行后final_table就是你需要的表格:每行是一个微生物-抗生素组合,列0和1分别对应该组合的0、1出现次数。
内容的提问来源于stack exchange,提问作者atharvi gupta
相关产品推荐
相关产品推荐

