使用R语言rbind函数出现‘names do not match previous names’错误的解决方法
解决R中
rbind的列名不匹配错误 这个错误的核心原因很直白:你要合并的两个数据框列名不匹配!我们来拆解一下问题:
t_descriptive_g是按cntry分组汇总的结果,它的第一列是cntry,后面跟着各项统计列;- 而
cbind(group="Total", t_descriptive_a)生成的临时数据框,第一列是group,后面的统计列和前者一致。
rbind要求两个数据框的列名完全对应、顺序也得匹配,所以这俩凑一起就报错了。下面给你几种简单的解决方法:
方法1:统一分组结果的列名
把分组汇总后的cntry列重命名为group,和总览数据的列名对齐:
t_descriptive_g<- x %>% group_by(cntry) %>% summarise(mean_stflife=mean(stflife), stand.D_stflife = sd(stflife), mean_pray=mean(pray), stand.D_pray=sd(pray), N=n()) %>% rename(group = cntry) # 把cntry改名为group t_descriptive_a<- x %>% summarise(mean_stflife=mean(stflife), stand.D_stflife = sd(stflife), mean_pray=mean(pray), stand.D_pray=sd(pray), N=n()) t<- rbind(t_descriptive_g, cbind(group="Total", t_descriptive_a)) kable(t)
方法2:让总览数据用cntry作为列名
反过来,总览数据的第一列用cntry而不是group,和分组结果对齐:
t_descriptive_g<- x %>% group_by(cntry) %>% summarise(mean_stflife=mean(stflife), stand.D_stflife = sd(stflife), mean_pray=mean(pray), stand.D_pray=sd(pray), N=n()) t_descriptive_a<- x %>% summarise(mean_stflife=mean(stflife), stand.D_stflife = sd(stflife), mean_pray=mean(pray), stand.D_pray=sd(pray), N=n()) t<- rbind(t_descriptive_g, cbind(cntry="Total", t_descriptive_a)) # 这里用cntry代替group kable(t)
方法3:用dplyr::bind_rows更简洁
bind_rows是dplyr里的合并函数,比基础包的rbind更灵活,我们可以直接在总览的summarise里加入cntry="Total",一步到位:
t_descriptive_g<- x %>% group_by(cntry) %>% summarise(mean_stflife=mean(stflife), stand.D_stflife = sd(stflife), mean_pray=mean(pray), stand.D_pray=sd(pray), N=n()) t_descriptive_a<- x %>% summarise(cntry="Total", # 直接在这里添加分组列 mean_stflife=mean(stflife), stand.D_stflife = sd(stflife), mean_pray=mean(pray), stand.D_pray=sd(pray), N=n()) t<- bind_rows(t_descriptive_g, t_descriptive_a) kable(t)
这几种方法都能解决列名不匹配的问题,你可以根据自己的习惯选一种来用~
内容的提问来源于stack exchange,提问作者Adolf Miszka
相关产品推荐
相关产品推荐

