我发现在这里已经有很多关于合并数据集的问题和回答问题,但是我找不到解决我的问题的问题。
我尝试做的是使用两个变量合并到数据集并保留每个变量的所有数据。我已尝试merge
以及来自join
的所有dplyr
操作以及cbind
并且未获得我想要的结果。通常情况是,其中一个数据集中的一列会被NAs
覆盖。另一件事情会发生,就像我full_join
dplyr
或all = TRUE
merge
中的 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
添加到另一个记录中。有没有办法对数据集进行重复数据删除并删除SELECT market, max(timestamp) AS TS
FROM tbl_data
GROUP BY market, DATE(timestamp), HOUR(timestamp)
ORDER BY market, TS ASC
?
答案 0 :(得分:1)
我们可以通过在合并声明中提及“by”来给出合并中的列名称
合并声明中的合并(x,y,by = c(col1,col2名称))
答案 1 :(得分:0)
我明白了。人口普查数据的县名中有尾随空格,因此它们与其他数据集的县名不匹配。 (注意自己:在尝试合并数据集时始终检查因素是否匹配!)
trim.trailing <- function (x) sub("\\s+$", "", x)
countyPops$Primary_County <- trim.trailing(countyPops$Primary_County)
countyPerCap <- full_join(countyLicense, countyPops,
by=c("Primary_State", "Primary_County"), copy=TRUE)
这三条线就行了。谢谢大家!