【发布时间】:2017-11-03 14:40:16
【问题描述】:
我意识到这里已经有很多关于合并数据集的问题,但我一直无法找到解决我的问题的问题。
我要做的是使用两个变量合并到数据集并保留每个变量的所有数据。我已经尝试了merge 和来自dplyr 的所有join 操作,以及cbind 并没有得到我想要的结果。通常发生的情况是其中一个数据集的一列被NAs 覆盖。另一件事会发生,比如当我在dplyr 中执行full_join 或在merge 中执行all = TRUE 时,我得到的行数增加了一倍。
这是我的数据:
Primary_State Primary_County n
<fctr> <fctr> <int>
1 AK 12
2 AK Aleutians West 1
3 AK Anchorage 961
4 AK Bethel 1
5 AK Fairbanks North Star 124
6 AK Haines 1
Primary_County Primary_State Population
1 Autauga AL 55416
2 Baldwin AL 208563
3 Barbour AL 25965
4 Bibb AL 22643
5 Blount AL 57704
6 Bullock AL 10362
所以我想基于Primary_State和Primary_County进行合并或加入,这是必要的,因为美国有很多重复的县名,并保留了来自n和Population的数据。然后我可以从那里将Population 除以n 并得到每个县的人均数字。我只是无法弄清楚如何做到这一点并保留所有数据,因此将不胜感激。提前致谢!
编辑:添加我上面已经描述的代码示例。
此代码(以及left_join):
countyPerCap <- merge(countyLicense, countyPops, all.x = TRUE)
产生这个:
Primary_State Primary_County n Population
1 AK 12 NA
2 AK Aleutians West 1 NA
3 AK Anchorage 961 NA
4 AK Bethel 1 NA
5 AK Fairbanks North Star 124 NA
6 AK Haines 1 NA
这段代码:
countyPerCap <- right_join(countyLicense, countyPops)
产生这个:
Primary_State Primary_County n Population
<chr> <chr> <int> <int>
1 AL Autauga NA 55416
2 AL Baldwin NA 208563
3 AL Barbour NA 25965
4 AL Bibb NA 22643
5 AL Blount NA 57704
6 AL Bullock NA 10362
希望对您有所帮助。
编辑:以下代码会发生这种情况:
countyPerCap <- merge(countyLicense, countyPops, all = TRUE)
Primary_State Primary_County n Population
1 AK 12 NA
2 AK Aleutians East NA 3296
3 AK Aleutians West 1 NA
4 AK Aleutians West NA 5647
5 AK Anchorage 961 NA
6 AK Anchorage NA 298192
它复制州和县,然后将n 添加到一个记录中,将Population 添加到另一个记录中。有没有办法对数据集进行重复数据删除并删除NAs?
【问题讨论】:
-
你能添加一些你尝试失败的代码吗?如果您使用给出的示例而不是整个数据集来显示结果,这将有所帮助。另外,我在您的第一个数据集示例中看到了一个可能的缺失值,这可能会使事情复杂化。
-
@aosmith,我添加了一些代码和输出。这是我在问题中所说的,但根据您的要求提供代码和输出。
-
鉴于您从两个数据集中提供的 6 行数据,这是您所期望的输出 - 它们不共享州/县组合。当州/县组合不存在时,您认为应该填写什么?
-
如果缺少州/县组合可能是导致您遇到问题的原因,
anti_join可以帮助您进行故障排除。它使您可以查看其中一个数据集中缺少哪些组合但在另一个数据集中存在。