在R

时间:2017-11-03 14:40:16

标签: r merge dplyr

我发现在这里已经有很多关于合并数据集的问题和回答问题,但是我找不到解决我的问题的问题。

我尝试做的是使用两个变量合并到数据集并保留每个变量的所有数据。我已尝试merge以及来自join的所有dplyr操作以及cbind并且未获得我想要的结果。通常情况是,其中一个数据集中的一列会被NAs覆盖。另一件事情会发生,就像我full_join dplyrall = 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_Countyn进行合并或加入,这是必要的,因为美国有很多重复的县名,并保留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

2 个答案:

答案 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)

这三条线就行了。谢谢大家!