【发布时间】:2020-07-02 05:26:42
【问题描述】:
我有两个具有以下匹配键的数据框:年份、地区和省份。它们每个都有一组变量(在这个说明性示例中,我使用 x1 表示 df1,x2 表示 df2),并且两个变量本身都有几个缺失值。
df1 df2
year region province x2 ... xn year region province x2 ... xn
2019 1 5 NA 2019 1 5 NA
2019 2 4 NA. 2019 2 4 NA.
2019 2 4 NA. 2019 2 4 NA
2018 3 7 13. 2018 3 7 13
2018 3 7 15 2018 3 7 15
2018 3 7 17 2018 3 7 17
我想合并两个数据框,使它们最终变成这样:
year region province x1 x2
2019 1 5 3 NA
2019 2 4 27 NA
2019 2 4 15 NA
2018 3 7 12 13
2018 3 7 NA 15
2018 3 7 NA 17
2017 4 9 NA 12
2017 4 9 19 30
2017 4 9 20 10
但是,当使用merged_df <- merge(df1, df2, by=c("year","region","province"), all.x=TRUE) 执行此操作时,R 似乎在每个变量列(x1 和 x2)上创建了许多额外的缺失值,这是以前不存在的。这里发生了什么?我已经尝试使用df1 %>% arrange(province,-year) 和df2 %>% arrange(province,-year) 进行排序,这足以在两个数据框中具有匹配的顺序,只是在运行merge 命令时发现相同的问题。我也尝试了很多其他的东西,但似乎没有任何效果。 R 的输出如下所示:
year region province x1 x2
2019 1 5 NA NA
2019 2 4 NA NA
2019 2 4 NA NA
2018 3 7 NA NA
2018 3 7 NA NA
2018 3 7 NA NA
2017 4 9 15 NA
2017 4 9 19 30
2017 4 9 20 10
我以前做过这个;事实上,其中一个数据框是一个已经合并的数据框,我没有遇到这个问题。
【问题讨论】:
-
我在您的 `by` 列上看到许多重复项,因此这不是主键。这就解释了看似奇怪的结果。
-
@Edward 我知道他们,但看起来仍然很奇怪。数据框是故意这样构造的;它们包含每个省的若干年度观察结果,并且每个省(在大多数情况下,不止一个)都是一个区域的一部分。我刚刚在 Stata 上执行了相同的操作,它完成它没有任何问题,考虑到我不喜欢那种环境,这令人沮丧。很抱歉没有发布 reprex 或正确的格式 - 我是 R 和 Stack Overflow 的新手
-
Stata 命令是什么?
-
@Edward 使用 df2.dta 合并 1:1 省份区域年份;在加载 df1 时执行
-
@Edward 所以如果不麻烦的话,请问什么是正确的方法?