在R中合并不同年份数据集构建整洁数据集的问题求助
解决tidy数据合并:纵向堆叠而非关联合并
嘿,我完全懂你现在的困惑!你想要的是把两个同结构的年份数据集纵向堆叠,让不同年份的数据分行展示,但误用了full_join()——这个函数是用来做横向关联合并的,这就是为啥会出现GDP.x和GDP.y这类后缀变量的原因~
问题根源
full_join(df1, df2, by = "country")的作用是根据country把两个数据集的列拼在一起:当两个数据集里有同名但不在by参数里的变量(比如你的Year和GDP),它会自动给这些变量加上.x(来自df1)和.y(来自df2)的后缀来区分,这显然不是你要的“分行展示各年份数据”的效果。
正确解决方案:用bind_rows()做行绑定
在tidyverse的dplyr包中,bind_rows()就是专门用来堆叠结构相同(变量名一致)的数据集的,正好匹配你的需求:
library(dplyr) # 堆叠两个数据集 merged_df <- bind_rows(df1, df2) # 可选:按Country排序,让同一国家的年份数据排在一起 merged_df <- merged_df %>% arrange(Country)
运行这段代码后,你就能得到完全符合预期的结果:
| Country | Year | GDP |
|---|---|---|
| Albania | 2000 | X1 |
| Albania | 2010 | X2 |
| Brazil | 2000 | X3 |
| Brazil | 2010 | X4 |
| China | 2000 | X5 |
| China | 2010 | X6 |
小提示
如果你的两个数据集变量名有细微差异(比如一个是country小写,一个是Country大写),可以先统一变量名,或者用bind_rows(.id = "data_source")参数给每条数据标记来源(比如标记是来自2000年还是2010年的数据集),确保堆叠过程不出错。
内容的提问来源于stack exchange,提问作者user1778351




