R语言使用Reduce+merge合并多数据集时如何设置全局自定义后缀
问题根源
- R的
merge()函数的suffixes参数仅接收长度为2的字符向量,用来给单次合并的两个输入数据框的重叠列加后缀,你传入3个后缀的写法不会生效 Reduce()是两两迭代执行合并:第一次合并D1、D2,第二次合并第一次的结果和D3。你写的固定suffixes参数在第二次合并时,只会取前两个值,给前一次合并结果的重叠列加第一个后缀,D3的重叠列加第二个后缀,完全达不到分别对应三个数据集后缀的需求
修复方案
推荐先给每个数据集的非合并键列(也就是除了email之外的所有列)提前添加对应后缀,再执行合并,逻辑清晰不会出错:
DATA <- list(D1, D2, D3) suffix_vec <- c(".a1", ".a2", ".a3") # 按顺序对应三个数据集的自定义后缀 # 遍历给每个数据集的非email列添加专属后缀 DATA_with_suffix <- mapply(function(df, suf) { non_by_cols <- setdiff(colnames(df), "email") colnames(df)[colnames(df) %in% non_by_cols] <- paste0(non_by_cols, suf) return(df) }, DATA, suffix_vec, SIMPLIFY = FALSE) # 合并已处理好的数据集,无需再指定suffixes参数 DATAMERGE <- function(df1, df2){ merge(df1, df2, by = "email") } RESULT<-Reduce(DATAMERGE, DATA_with_suffix) View(RESULT)
内容的提问来源于stack exchange,提问作者Nora
相关产品推荐
相关产品推荐

