【问题标题】:Having trouble merging/joining two datasets on two variables in R在 R 中的两个变量上合并/连接两个数据集时遇到问题
【发布时间】: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_StatePrimary_County进行合并或加入,这是必要的,因为美国有很多重复的县名,并保留了来自nPopulation的数据。然后我可以从那里将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 可以帮助您进行故障排除。它使您可以查看其中一个数据集中缺少哪些组合但在另一个数据集中存在。

标签: r merge dplyr


【解决方案1】:

我们可以通过在合并语句中提到“by”来给合并中的列名

合并(x,y, by=c(col1, col2 名称))

在合并语句中

【讨论】:

    【解决方案2】:

    我想通了。人口普查数据的县名中有尾随空格,因此它们与其他数据集的县名不匹配。 (自我注意:尝试合并数据集时始终检查因素是否匹配!)

    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)
    

    这三行就成功了。谢谢大家!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-07-13
      • 2022-11-09
      • 1970-01-01
      • 2019-12-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多