如何合并R语言中的tab1与tab2数据框以得到指定格式?
解决R语言数据框合并问题
你创建的两个数据框代码如下:
tab1 <- medivmind %>% select(medi_total_factor, participant_id) %>% filter(!is.na(medi_total_factor)) %>% count(medi_total_factor, .drop = FALSE) %>% add_column(diet = "medi") %>% rename(n_medi = n, score = medi_total_factor) # DF1输出示例 score n_medi diet 1 0 0 medi 2 0.5 0 medi 3 1 7 medi ... tab2 <- medivmind %>% select(mind_total_factor, participant_id) %>% filter(!is.na(mind_total_factor)) %>% count(mind_total_factor, .drop = FALSE) %>% add_column(diet = "mind") %>% rename(n_mind = n, score = mind_total_factor) # DF2输出示例 score n_mind diet 1 0 0 mind 2 0.5 0 mind 3 1 0 mind ...
你期望合并后的格式为:
score n_mind diet 1 0 0 mind 2 0 0 medi 3 0.5 0 mind 4 0.5 0 medi ...
但使用rbind、cbind、left_join得到的是错误格式,例如:
score n_medi diet score n_mind diet 1 0 0 medi 0 0 mind 2 0.5 0 medi 0.5 0 mind ...
正确合并方案
核心问题是两个数据框的计数列名不一致(n_medi vs n_mind),导致无法直接按行合并,以下是两种可行方法:
方法1:统一列名后用rbind合并
先将两个数据框的计数列改为相同名称,再执行行合并:
library(dplyr) # 统一tab1的计数列名 tab1_unified <- tab1 %>% rename(n_mind = n_medi) # 合并两个数据框 combined_df <- rbind(tab1_unified, tab2) # 按score和diet排序,匹配期望的输出顺序 combined_df <- combined_df %>% arrange(score, diet)
方法2:用bind_rows自动补全后整理列
dplyr的bind_rows可自动处理列名差异,缺失列填充为NA,之后再合并计数列:
library(dplyr) # 合并数据框 combined_df <- bind_rows(tab1, tab2) # 合并n_medi和n_mind列,空值填充为0 combined_df <- combined_df %>% mutate(n_mind = coalesce(n_medi, n_mind)) %>% select(score, n_mind, diet) %>% arrange(score, diet)
两种方法最终都能得到你需要的合并结果。
内容的提问来源于stack exchange,提问作者Devon Fox
相关产品推荐
相关产品推荐

