R 基于正则表达式条件合并数据帧

R 基于正则表达式条件合并数据帧,r,regex,dataframe,R,Regex,Dataframe,这个问题涉及R。我有两个数据帧,由这个最小的可复制示例表示: a <- data.frame(geocode_selector = c("36005", "36047", "36061", "36081", "36085"), county_name = c("Bronx", "Kings", "New York", "Queens", "Richmond")) b <- data.frame(geocode = c("360050002001002", "3608503230010

这个问题涉及R。我有两个数据帧,由这个最小的可复制示例表示:

a <- data.frame(geocode_selector = c("36005", "36047", "36061", "36081", "36085"), county_name = c("Bronx", "Kings", "New York", "Queens", "Richmond"))
b <- data.frame(geocode = c("360050002001002", "360850323001019"), jobs = c("4", "204"))
但我实际处理的大型数据集花费了非常长的时间,而最终产品并不是我想要的

任何关于如何基于正则表达式条件有条件地合并数据帧的见解都将不胜感激。

您可以这样做

b$geocode_selector <- substr(b$geocode,1,5)
b2 <- merge(b, a, all.x=TRUE) #by default it will merge on common column names

b2
  geocode_selector         geocode jobs county_name
1            36005 360050002001002    4       Bronx
2            36085 360850323001019  204    Richmond
b$geocode\u选择器您可以这样做

b$geocode_selector <- substr(b$geocode,1,5)
b2 <- merge(b, a, all.x=TRUE) #by default it will merge on common column names

b2
  geocode_selector         geocode jobs county_name
1            36005 360050002001002    4       Bronx
2            36085 360850323001019  204    Richmond

b$geocode\u选择器我们可以使用
sub
创建“geocode\u选择器”,然后进行连接

library(data.table)
setDT(a)[as.data.table(b)[, geocode_selector := sub('^(.{5}).*', '\\1', geocode)], 
                     on = .(geocode_selector)]
#   geocode_selector county_name         geocode jobs
#1:            36005       Bronx 360050002001002    4
#2:            36085    Richmond 360850323001019  204

我们可以使用
sub
创建“地理编码选择器”,然后进行连接

library(data.table)
setDT(a)[as.data.table(b)[, geocode_selector := sub('^(.{5}).*', '\\1', geocode)], 
                     on = .(geocode_selector)]
#   geocode_selector county_name         geocode jobs
#1:            36005       Bronx 360050002001002    4
#2:            36085    Richmond 360850323001019  204

这是使用dplyr的绝佳机会。我也喜欢stringr中的字符串处理函数,比如
str\u sub


库(dplyr)
图书馆(stringr)
a%
内部联接(a,by=“地理编码选择器”)
#>#A tibble:2 x 4
#>地理编码作业地理编码选择器县名称
#>                                 
#>1 360050002001002 4 36005布朗克斯
#>2 36085033001019 204 36085里士满

这是使用dplyr的绝佳机会。我也喜欢stringr中的字符串处理函数,比如
str\u sub


库(dplyr)
图书馆(stringr)
a%
内部联接(a,by=“地理编码选择器”)
#>#A tibble:2 x 4
#>地理编码作业地理编码选择器县名称
#>                                 
#>1 360050002001002 4 36005布朗克斯
#>2 36085033001019 204 36085里士满
如果(…==TRUE)
是无意义的代码:只要写
如果(…)
,就不需要再写
==TRUE
:如果(…==TRUE)
已经这样做了。
如果(…==TRUE)
是无意义的代码:只要写
如果(…)
,无需再写
==TRUE
:这就是
已经做过的事情。