R语言合并多DataFrame遇行数不一致报错,后发现代码疏漏
解决R中多DataFrame按Id+Day全连接合并的问题
错误原因
你之前的代码报错核心是没有保存reduce(full_join)的运行结果,反而用do.call(cbind, final_chart)去合并原始列表里行数不一致的DataFrame(713行和413行),而cbind要求所有输入的DataFrame行数完全一致,因此触发错误。
正确解决方案
reduce(full_join)本身已经完成了你需要的「全连接+自动填充缺失值为NA」的操作,直接将结果赋值给变量即可,不需要额外的cbind步骤:
library(dplyr) library(purrr) # 将三个DataFrame存入列表 df_list <- list(new_activity, new_calories, new_sleep) # 按Id和Day执行全连接,缺失的Id+Day组合对应的列自动填充NA final_chart <- df_list %>% reduce(full_join, by = c('Id', 'Day'))
细节补充
- 如果三个DataFrame存在非连接列重名的情况,
full_join会自动为重复列名添加.x/.y后缀,你可以通过suffix参数自定义后缀,比如:final_chart <- df_list %>% reduce(full_join, by = c('Id', 'Day'), suffix = c("_activity", "_calories")) - 最终得到的
final_chart会包含所有出现过的Id+Day组合,缺失的观测值统一填充为NA,完全替代手动填充的繁琐操作。
内容的提问来源于stack exchange,提问作者Aquatica1000
相关产品推荐
相关产品推荐

