You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何合并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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 18:16:06