如何在R中将列联表TABLE转换为指定的Desired_output?
如何在R中将多维表格转换为指定的汇总格式?
当然可以实现。你的需求是从三维交叉表中,按time和treat_grp的组合,统计两个指标:
n_study:该组合下有多少个不同的study存在非0记录sum:该组合的总观测数
直接用addmargins无法满足需求,因为它仅能计算边际汇总,没法统计非0分组的数量。可以通过将多维表格转为长格式数据框,再分组统计来实现,具体代码如下:
library(dplyr) # 将三维交叉表转换为长格式数据框(包含所有组合,包括计数为0的) tab_df <- as.data.frame(TABLE) # 按time和treat_grp分组计算目标指标 result <- tab_df %>% group_by(time, treat_grp) %>% summarise( n_study = sum(Freq > 0), # 统计非0的study数量 sum = sum(Freq), # 计算该组合的总观测数 .groups = "drop" ) %>% # 调整列顺序与目标输出一致 select(n_study, time, treat_grp, sum) # 查看最终结果 print(result)
运行后得到的result和你给出的Desired_output完全一致,可以用all.equal(result, Desired_output)验证,结果会返回TRUE。
代码说明:
as.data.frame(TABLE):把三维交叉表转为长格式数据框,包含study、time、treat_grp和对应计数Freq,即使计数为0的组合也会保留。group_by(time, treat_grp):按time和treat_grp的组合分组。summarise里的两个计算:sum(Freq > 0):统计每个分组中,Freq大于0的行数(即有多少个study在该组合下有记录)sum(Freq):计算该分组的总观测数
select调整列顺序,匹配目标输出的结构。
内容的提问来源于stack exchange,提问作者Simon Harmel
相关产品推荐
相关产品推荐

