R 不列出保持相同数量的元素(矢量化)

R 不列出保持相同数量的元素(矢量化),r,twitter,vectorization,stringr,R,Twitter,Vectorization,Stringr,我试图从一些tweet中提取所有hashtags,并为每个tweet获取一个包含所有hashtags的字符串。 我正在使用stru extractfromstringr,因此我获得了一个字符向量列表。我的问题是,我没有设法取消它的列表,并保持列表中相同数量的元素(即推文的数量)。 例如: 这是长度为3的tweet向量: a <- "rt @ugh_toulouse: #mondial2014 : le top 5 des mannequins brésiliens http://www.l

我试图从一些tweet中提取所有hashtags,并为每个tweet获取一个包含所有hashtags的字符串。 我正在使用
stru extract
from
stringr
,因此我获得了一个字符向量列表。我的问题是,我没有设法取消它的列表,并保持列表中相同数量的元素(即推文的数量)。 例如:

这是长度为3的tweet向量:

a <- "rt @ugh_toulouse: #mondial2014 : le top 5 des mannequins brésiliens http://www.ladepeche.fr/article/2014/06/01/1892121-mondial-2014-le-top-5-des-mannequins-bresiliens.html #brésil "
b <- "rt @30millionsdamis: beauté de la nature : 1 #baleine sauve un naufragé ; elles pourtant tellement menacées par l'homme... http://goo.gl/xqrqhd #instinctanimal "
c <- "rt @onlyshe31: elle siège toujours!!!!!!!  marseille. nouveau procès pour la députée - 01/06/2014 - ladépêche.fr http://www.ladepeche.fr/article/2014/06/01/1892035-marseille-nouveau-proces-pour-la-deputee.html #toulouse "
all <- c(a, b, c)
如果我现在使用
unlist
我得到一个长度为5的向量:

undesired <- unlist(ex)
> undesired
[1] "#mondial2014 "    "#brésil "        
[3] "#baleine "        "#instinctanimal "
[5] "#toulouse " 
不想要的不想要的
[1] “#mondial2014”“#brésil”
[3] “#baleine”“本能动物”
[5] “图卢兹”
我想要的是下面这样的东西。然而,这是非常低效的,因为它不是矢量化的,而且在一个很小的tweet数据帧上需要永远(真的!):

desired <- c()
for (i in 1:length(ex)){
  desired[i] <- paste(ex[[i]], collapse = " ")
}

> desired
[1] "#mondial2014  #brésil "    
[2] "#baleine  #instinctanimal "
[3] "#toulouse " 

所需您可以使用
stringi
,这对于大型数据集来说可能更快

library(stringi)
sapply(stri_extract_all_regex(all, '#(.+?)[ |\n]'), paste, collapse=' ')
#[1] "#mondial2014  #brésil "     "#baleine  #instinctanimal "
#[3] "#toulouse " 
如果
preassign
输出
所需的长度

desired <- numeric(length(ex))
for (i in 1:length(ex)){
  desired[i] <- paste(ex[[i]], collapse = " ") 
}
或者按照@Ananda Mahto的建议

 vapply(stri_extract_all_regex(all, '#(.+?)[ |\n]'),
              stri_flatten, character(1L), collapse = " ")

您的正则表达式效率低下,而且有点错误。(你不应该有一个
+
修饰符和一个
修饰符,而与
的匹配很慢。)试试
“#([[:alpha:][[:alnum:]*)”
。(但请仔细检查这是否适用于您所在地区的unicode字符。另请参阅)非常好的建议。我最后在我的数据
data$hashtags上使用了这个,我会被
desired
sapply(stri_extract\u all\u regex(all。非常感谢你们两位。@akrun,为什么不把所有的东西都串起来呢<代码>vapply(stri_extract_all_regex(all),#(.+?)[|\n]),stri_展平,字符(1L),collapse=“”)
?:-)
vapply(ex, toString, character(1))
#[1] "#mondial2014 , #brésil "     "#baleine , #instinctanimal "
#[3] "#toulouse "                 
 vapply(stri_extract_all_regex(all, '#(.+?)[ |\n]'),
              stri_flatten, character(1L), collapse = " ")