如何使str_检测代码在R中更有效?

如何使str_检测代码在R中更有效?,r,stringr,R,Stringr,我想检查一下在我的观察(1867)中是否有6900个名字列表中的一只股票存在,如果有,在另一列写上“是” 这是我的代码: for (i in 1:length(df$upvotes)){ if (str_detect(df$text[i], pattern = paste("[:space:](\\$?)",stocks$Stocks,"(\\$?)[:space:]",collapse ="|"))){ df$call[i

我想检查一下在我的观察(1867)中是否有6900个名字列表中的一只股票存在,如果有,在另一列写上“是”

这是我的代码:

for (i in 1:length(df$upvotes)){
  if (str_detect(df$text[i], pattern = paste("[:space:](\\$?)",stocks$Stocks,"(\\$?)[:space:]",collapse ="|"))){
    df$call[i] <- "yes"
  }}
for(1中的i:长度(df$upvots)){
如果(str_detect(df$text[i],pattern=paste(“[:空格:”(\\$?)”,stocks$stocks,(\\$?)[:空格:”,collapse=“|”)){
df$call[i]中提供的解决方案似乎与您提供的数据配合使用

例如:

stocks <- data.frame(stock = c("AAPL","AACG","AACQ","AACQU","AACQW","AAIC"))

stocksearch <- paste0("[\\s$]",stocks$stock,"+[\\s$]",collapse ="|")

which(str_detect(df$text, stocksearch))
[1] 352

df$text[352]
[1] "Blew up my account with AMD and AAPL calls expiring after earnings.\n\nNow I'm going bear mode and hitting up that VIX and spy Puts"

#Dataframe update
df$call[which(str_detect(df$text, stocksearch))] <- "yes"

stocks中提供的解决方案似乎与您提供的数据相符

例如:

stocks <- data.frame(stock = c("AAPL","AACG","AACQ","AACQU","AACQW","AAIC"))

stocksearch <- paste0("[\\s$]",stocks$stock,"+[\\s$]",collapse ="|")

which(str_detect(df$text, stocksearch))
[1] 352

df$text[352]
[1] "Blew up my account with AMD and AAPL calls expiring after earnings.\n\nNow I'm going bear mode and hitting up that VIX and spy Puts"

#Dataframe update
df$call[which(str_detect(df$text, stocksearch))] <- "yes"


stocks您能提供一些带有
dput(head(df))的样本数据吗
?避免循环通常会使代码更高效。它说太长,而pastebin给我带来了问题,因为观察结果中有冒犯性的术语,我如何向您提供它?您是否使用
head
仅获得几行?我复制了您提供的代码,问题是第一个观察结果是整个reddit postsOK,I see…我建议的另一个链接是什么?你能提供一些带有
dput(head(df))的示例数据吗
?避免循环通常会使代码更高效。它说太长,而pastebin给我带来了问题,因为观察结果中有冒犯性的术语,我如何向您提供它?您是否使用
head
仅获得几行?我复制了您提供的代码,问题是第一个观察结果是整个reddit postsOK,I see…我建议的另一个链接呢?谢谢你的回答,我试图添加正则表达式(我想在股票名称前后加一个空格和一个美元,可以在股票名称的开头、结尾或不存在),但我仍然无法运行它。我的代码是:粘贴([:空格:(\\$)”,股票$stocks,(\\$)[:空格:“,collapse=“|”)。我还试图删除美元符号部分。你能给出你正在寻找的股票的例子吗?我理解:
$AAPL
AAPL$
str\u detect(“test$AAPL test”,stocksearch)
返回
FALSE
可以是“AAPL”、“$AAPL”或“AAPL$”我根据您的需要更新了正则表达式。谢谢您的回答,我尝试向它添加正则表达式(我希望在股票名称前后加一个空格和一个美元,可以在股票名称的开头、结尾或不存在),但我仍然无法运行它。我的代码是:粘贴([:空格:(\\$)”,股票$stocks,(\\$)[:空格:“,collapse=“|”)。我还试图删除美元符号部分。您能否给出您正在寻找的股票的示例。我理解:
$AAPL
AAPL$
str_detect(“test$AAPL test”,stocksearch)
返回
FALSE
可以是“AAPL”、“$AAPL”或“AAPL$”,我根据您的需要更新了正则表达式。