R语言合并列名存在差异的多份Excel调研文件的实现方法
R批量合并列名前缀匹配的调研Excel文件方案
核心逻辑
原有适配标准化调研1的批量合并逻辑不需要大改,只需要在单文件读取环节增加一步按前缀统一重命名目标列的处理:把所有文件中以指定前缀开头的列重命名为统一的固定列名,处理后所有文件列名完全一致,就可以直接按原来的行绑定逻辑完成合并。
可直接运行的修改后代码
library(readxl) my_files <- list.files(pattern = "*.xls") Survey <- lapply(my_files, function(i){ x = read_excel(i, sheet=1, skip = 14) # 按前缀统一重命名行为题项列 colnames(x) <- ifelse( startsWith(colnames(x), "4(a)."), "q4a", ifelse( startsWith(colnames(x), "4(b)."), "q4b", ifelse( startsWith(colnames(x), "4(c)."), "q4c", colnames(x) # 其余非目标列保留原列名 ) ) ) # 可选:增加异常校验,识别缺失目标题项的文件 target_cols <- c("q4a", "q4b", "q4c") miss_col <- setdiff(target_cols, colnames(x)) if (length(miss_col) > 0) { warning(sprintf("文件%s缺失题项列:%s", i, paste(miss_col, collapse = "、"))) } x$file = i x }) Survey = do.call("rbind.data.frame", Survey)
后续统计说明
合并完成后,所有样本对应4(a)/4(b)/4(c)题的得分会分别存在q4a/q4b/q4c三列中,直接对这三列计算均值即可得到对应题项的平均得分。如果后续需要增加其他前缀规则的题项合并,只需要在列重命名的嵌套判断里补充对应前缀和统一后的列名即可。
注:代码中使用的
startsWith()是R原生基础函数,不需要额外安装依赖包,匹配规则为严格匹配字符串开头,不会出现前缀误匹配的问题。
内容的提问来源于stack exchange,提问作者SBQ
相关产品推荐
相关产品推荐

