R 基于正则表达式条件合并数据帧
这个问题涉及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
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
:这就是已经做过的事情。