坚持使用dplyr - 在R中合并

时间:2018-04-24 22:28:49

标签: r

R的新手,这是我两天内的第二个问题。我想按子区域合并两个数据框用于县地图。有很多关于如何执行此操作的示例和文档,我已经仔细阅读,但我的代码仍然无法实现。无论如何,这就是我所拥有的。

library(dplyr)

#Examine data set/s

#Data frame: County polygon points
> head(oc_df)
           # long      lat group order region subregion
# 59960 -83.66902 39.02989  2012 59960   ohio     adams
# 59961 -83.56590 39.02989  2012 59961   ohio     adams
# 59962 -83.37109 39.06426  2012 59962   ohio     adams
# 59963 -83.30806 39.06426  2012 59963   ohio     adams
# 59964 -83.30233 39.05280  2012 59964   ohio     adams
# 59965 -83.25649 39.01842  2012 59965   ohio     adams

#Data frame: Indemnity 
head(oi_df)

# subregion indemnity
# 1 adams                           42778.25
# 2 allen                           88580.26
# 3 ashland                        167509.27
# 4 ashtabula                       25738.28
# 5 athens                           7080.00
# 6 auglaize                        99353.25


#Make sure indemnity is numeric & county is character
oi_df$indemnity <- as.numeric(oi_df$indemnity)
oi_df$subregion <- as.character(oi_df$subregion)

#Attach every point on polygons of the counties
ohcopa <- inner_join(oc_df, oi_df, by = "subregion")

#I get a list  of 0 obs. and 7 variables. 

#When that didn't work  I tried
ohcopa <- merge(oc_df, oi_df, by = "subregion")

#Still the same

可能缺少基本的东西,不知道它是什么。

str(oi_df)
'data.frame':   86 obs. of  2 variables:
 $ subregion: chr  "adams                         " "allen                         " "ashland                       " "ashtabula                     " ...
 $ indemnity: num  42778 88580 167509 25738 7080 ...

> str(oc_df)
'data.frame':   1427 obs. of  6 variables:
 $ long     : num  -83.7 -83.6 -83.4 -83.3 -83.3 ...
 $ lat      : num  39 39 39.1 39.1 39.1 ...
 $ group    : num  2012 2012 2012 2012 2012 ...
 $ order    : int  59960 59961 59962 59963 59964 59965 59966 59967 59968 59969 ...
 $ region   : chr  "ohio" "ohio" "ohio" "ohio" ...
 $ subregion: chr  "adams" "adams" "adams" "adams" ...

1 个答案:

答案 0 :(得分:1)

执行以下操作:

oi_df$subregion <- trimws(oi_df$subregion) 

之后尝试合并。

如果按照oi_df中的定义查看您的子区域,您会看到例如

 "adams                         "

请注意,该名称中有很多空格。但是,从第二个数据框中,我们得到了

 "adams"

没有任何空白区域。

因此,您合并的键是不同的,需要先调整。也就是说,需要删除第一个键中的空格(或添加到第二个键中的空格,但让我们不要考虑那个)。基本包中的函数trimws或者例如str_trim中的stringr(以及其他包中的许多其他等效函数)为您完成此操作。