【问题标题】:Improving computation speed of a nested loop in R提高 R 中嵌套循环的计算速度
【发布时间】:2026-01-14 20:15:01
【问题描述】:

我有这个循环,我试图尽可能地改进它,遗憾的是,我不知道如何让它变得更好。

你有什么改进的想法吗?

#partial is a data frame that look like this
partial = data.frame(
partial.regex = c("european construction industry federation",
" zentralverband des deutschen baugewerbes",
"hauptverband der deutschen bauindustrie",
"1 1 drillisch ag 439568220616 04"))

> summary(partial)
 partial.name          regex            full.name        
 Length:13202       Length:13202       Length:13202      
 Class :character   Class :character   Class :character  
 Mode  :character   Mode  :character   Mode  :character

#full is also a df
full = data.frame(
full.name = c("International Lead Association (ILA)", "Airborne Wind Europe", "Sazka Group a.s",
regex = c("international lead association (ila)", "airborne wind europe", "sazka group a.s.")
> summary(full)
  full.name            regex          
 Length:9779        Length:9779       
 Class :character   Class :character  
 Mode  :character   Mode  :character  

循环来了。对不起,如果这很愚蠢,我是一个真正的初学者!


for(y in 1:dim(partial)[1]){
  a = 0
  b = ""
  for(i in 1:dim(full)[1]){
    
    vec = c(partial$regex[y], full$regex[i])

  

if(length(Reduce(`intersect`,stri_extract_all_regex(vec,"\\w+"))) > a){
      a = length(Reduce(`intersect`,stri_extract_all_regex(vec,"\\w+")))
      partial$full[y] = full$full.name[i]
    }
    
  }
}

提前感谢您为我提供的所有帮助!

最好的问候,

PS: 部分.csv = https://github.com/JMcrocs/MeetingMEPs/blob/main/partial.csv

full.csv = https://github.com/JMcrocs/MeetingMEPs/blob/main/full.csv

【问题讨论】:

    标签: r dataframe loops for-loop


    【解决方案1】:

    这是使用 ´outer+max.col` 的基本 R 选项

    partial$full <- full$full.name[
      max.col(
        lengths(outer(
          regmatches(partial$partial.regex, gregexpr("\\w+", partial$partial.regex)),
          regmatches(full$regex, gregexpr("\\w+", full$regex)),
          FUN = Vectorize(intersect)
        )),
        ties.method = "first"
      )
    ]
    

    【讨论】:

    • 非常感谢!这快了 3 倍!我还有很多东西要学