【问题标题】:R For loop slows down graduallyR For循环逐渐变慢
【发布时间】:2021-05-28 15:43:01
【问题描述】:

我有一个推文数据集,我从中提取提及的人的列表,然后对于每个提及,我在不同的数据框中创建一个单独的行。如果原始数据如下所示:

用户 |鸣叫
一个    | @B @C @D 嘿,伙计们,怎么了

我让它看起来像:

用户 |提及
一个     |乙
一个     | C
一个     | D

问题是,我为此使用 for 循环,它会随着时间的推移而变慢。前 10000 个实例发生得非常快,然后每秒经过 1000 个实例,当它达到 200K 时,它每秒执行 25 个实例。这是我的代码。我可以做些什么来提高性能?有超过 500 万条推文,这太慢了。

#create edge df
networks <- data.frame(user = character(), 
                   mentions=character(), 
                   stringsAsFactors=FALSE) 

#get all mentioned
mentionlist <- str_extract_all(tweets$tweet, "(?<=^|\\s)@[^\\s]+")


#start collecting edges
a <- 0
b <- 0 

for(i in mentionlist){
  a <- a+1
  for(j in i){
    b <- b+1
    networks[b,1] <- tweets[a,9]
    networks[b,2] <- j
    print(b) #to keep track of it
    #print(paste0(j, "   ", tweets[a,8], "   ",networks[b,1] ))
  }
}

【问题讨论】:

    标签: r for-loop twitter


    【解决方案1】:

    您可以将所有提及保存在一个列表中,并使用unnest 将它们放在不同的行中。试试看:

    library(dplyr)
    
    tweets %>%
      mutate(Mentions = stringr::str_extract_all(Tweet, "(?<=^|\\s)@[^\\s]+")) %>%
      tidyr::unnest(Mentions) -> result
    
    result
    

    【讨论】:

      猜你喜欢
      • 2022-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-06
      相关资源
      最近更新 更多