R中对多组列对应用自定义函数计算差异与一致率生成汇总表
实现方案
依赖包
需要提前加载以下工具包:
library(dplyr) library(purrr) # 如果使用下方备选方案还需加载 tidyr # library(tidyr)
核心代码
你之前定义的数据集df和compare_fun无需修改,直接运行以下代码即可得到目标汇总表:
# 提取所有配对参数的公共前缀(剔除_ptak后缀) param_prefix <- unique(gsub("_ptak$", "", names(df))) # 批量遍历所有参数对计算指标 result <- map_dfr(set_names(param_prefix), function(p) { diff_val <- compare_fun(df[[p]], df[[paste0(p, "_ptak")]]) tibble( sum = sum(diff_val), agree_pct = (nrow(df) - sum(diff_val)) / nrow(df) * 100 ) }, .id = "param") %>% column_to_rownames("param")
输出结果
打印result即可得到你需要的格式:
sum agree_pct DH 2 80 SZ 3 70 RM 5 50
备选方案(仅使用tidyverse长表转换逻辑)
如果更习惯用dplyr+tidyr的语法,也可以用宽转长的方式实现:
result <- df %>% mutate(id = row_number()) %>% pivot_longer(-id, names_to = c("param", ".value"), names_pattern = "(.*)_(ptak)") %>% rename(c1 = "NA", c2 = ptak) %>% mutate(diff = compare_fun(c1, c2)) %>% group_by(param) %>% summarise( sum = sum(diff), agree_pct = (n() - sum(diff)) / n() * 100 ) %>% column_to_rownames("param")
内容的提问来源于stack exchange,提问作者Chris Ruehlemann
相关产品推荐
相关产品推荐

