Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用str_detect()选择行,然后根据匹配的模式创建新变量?_R_Stringr - Fatal编程技术网

如何使用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=“|”)