如何使用str_detect()选择行,然后根据匹配的模式创建新变量?
我有一个几十万行的数据集。下面是一个他们看起来像什么的例子如何使用str_detect()选择行,然后根据匹配的模式创建新变量?,r,stringr,R,Stringr,我有一个几十万行的数据集。下面是一个他们看起来像什么的例子 X user_id screen_name name location 1 1 1.732895e+09 DROPPSScience DROPPS Consortium 2 2 1.172266e+18 Lamy40283167 Alex lamy precious Washington, USA 3 3 3.7
X user_id screen_name name location
1 1 1.732895e+09 DROPPSScience DROPPS Consortium
2 2 1.172266e+18 Lamy40283167 Alex lamy precious Washington, USA
3 3 3.773702e+08 cdockjr Calvin Wilborn Alabama, USA
4 4 7.040063e+07 xmtl2 Felicio
5 5 3.929519e+08 DeleceWrites Delece Smith-Barrow Washington, DC
6 6 1.130459e+18 evabrooke_26 Eva
7 7 1.067302e+08 MitchellHortert Mitchell R. Hortert Pittsburgh,PA
我在找到第二个数据集
我试图使用str_detect()查找states.csv文件中“location”列和任一列之间的任何匹配项。然后,我想创建一个新变量,用于存储每个观察的匹配模式
到目前为止,我已经尝试使用
data.set %>%
filter(str_detect(location, paste(states$State)
这将返回一些匹配项,但会忽略许多观察结果并发出警告
Warning message:
In stri_detect_regex(string, pattern, negate = negate, opts_regex = opts(pattern)) :
longer object length is not a multiple of shorter object length
州$State是一个因子变量,每个州和DC有51个级别。
是什么原因导致此警告,虽然匹配项很少,但它在某种程度上起作用
最后,我如何创建一个新变量,该变量基于匹配发生的时间,将匹配模式放入新变量中?如果“位置”和“状态”的长度不相同,可以选择使用
粘贴中的折叠来识别每个模式。它充当或
library(stringr)
library(dplyr)
data.set %>%
filter(str_detect(location, paste(states$State, collapse = "|")))
由于我们已经在使用stringr
,stru c
可以替代paste
data.set %>%
filter(str_detect(location, str_c(states$State, collapse = "|")))
或者如@HanselPalencia所述,如果“状态”中存在混淆,则使用“缩写”列进行模式检测
data.set %>%
filter(str_detect(location, str_c(states$Abbreviation, collapse = "|")))
你试过使用mutate()吗?需要注意的是,匹兹堡州是宾夕法尼亚州,因此我们必须找到一种方法,在必要的地方使用缩写进行检测。要在新变量中获得匹配,你可以使用mutate()而不是过滤器,说些类似于mutate(matches=str_detect(location,str_c)的话(states$State,collapse=“|”)
(取自@Akrun)mutate函数起作用,但新添加的变量是TRUE还是FALSE取决于是否存在匹配。是否有方法粘贴导致此新变量中匹配的模式?@Auresm如果需要提取模式。使用str_extract
即data.set%>%mutate(newcol=str_extract(location,str_c(表示$缩写,collapse=“|”)