0

我正在尝试从一些推文中提取所有主题标签,并为每条推文获取一个包含所有主题标签的字符串。我正在使用str_extractfrom stringr,所以我获得了一个字符向量列表。我的问题是我没有设法取消它并保持列表中相同数量的元素(即推文的数量)。例子:

这是长度为 3 的推文向量:

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)

现在我str_extract_all用来提取主题标签:

ex <- str_extract_all(all, "#(.+?)[ |\n]")

如果我现在使用unlist,我会得到一个长度为 5 的向量:

undesired <- unlist(ex)
> undesired
[1] "#mondial2014 "    "#brésil "        
[3] "#baleine "        "#instinctanimal "
[5] "#toulouse " 

我想要的是类似下面的东西。然而,这是非常低效的,因为它没有被矢量化,并且它需要永远(真的!)在一个小的推文数据帧上:

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

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

帮助!

4

1 回答 1

2

对于大数据集,您可以使用stringi可能更快的方法

library(stringi)
sapply(stri_extract_all_regex(all, '#(.+?)[ |\n]'), paste, collapse=' ')
#[1] "#mondial2014  #brésil "     "#baleine  #instinctanimal "
#[3] "#toulouse " 

如果你输出的长度,for循环可以很快preassigndesired

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

或者你可以使用vapply更快sapply更安全的方法(由@Richie Cotton 提供)

vapply(ex, toString, character(1))
#[1] "#mondial2014 , #brésil "     "#baleine , #instinctanimal "
#[3] "#toulouse "                 

或如@Ananda Mahto 所建议的那样

 vapply(stri_extract_all_regex(all, '#(.+?)[ |\n]'),
              stri_flatten, character(1L), collapse = " ")
于 2014-12-09T11:34:53.573 回答