【问题标题】:Looking for the faster alternative of FOR loop in R [duplicate]在 R [重复] 中寻找更快的 FOR 循环替代方案
【发布时间】:2021-02-18 05:49:21
【问题描述】:

我正在使用 for 循环 来查找和替换数据框中的一些文本值。我的 findreplace 表有 1431 个模式,我的主 DF 包含 3.5 条 lac 记录。现在,我正在寻找一些更快的方法,以减少循环的运行时间并更快地完成工作。目前需要 33 分钟。

dfy<-data.frame(fuzzyname=c("AU HOUSING","BAJAJ AUTO","INDOSTAR CAPITAL","FULLLERTON INDIA","LIC HOUSING FINANCE","CAPITALFIRST"))
dfy[]<-sapply(dfy, as.character)
df_pat<-data.frame(find=c("AUTO","CAPITAL","LIC"))
df_rep<-data.frame(replace=c("AUTOMOBILES","CAP","LIFE CORPORATION OF INDIA"))

for(i in 1:nrow(df_pat)) {
  dfy$fuzzyname <- gsub(df_pat$find[i],df_rep$replace[i],dfy$fuzzyname,perl=T)
  print(paste(i,df_pat$find[i],sep = "----"))
}

Please help me out.

【问题讨论】:

    标签: r performance lapply gsub sapply


    【解决方案1】:

    使用stringr::str_replace_all,它是矢量化的,不需要for 循环。

    dfy$fuzzyname <- stringr::str_replace_all(dfy$fuzzyname, 
                         setNames(df_rep$replace, df_pat$find))
    dfy
    
    #                                  fuzzyname
    #1                                AU HOUSING
    #2                         BAJAJ AUTOMOBILES
    #3                              INDOSTAR CAP
    #4                          FULLLERTON INDIA
    #5 LIFE CORPORATION OF INDIA HOUSING FINANCE
    #6                                  CAPFIRST
    

    【讨论】:

    • stringr 包似乎非常有用。也许我应该学习 +1。
    • 我使用了相同的方法,但我也有一些使用正则表达式模式作为 L 分隔符和 R 分隔符的“查找”数据。我想知道,如何使用哪个“应用”功能以及如何获得解决方案?
    • 先生,我能否通过使用“应用”系列获得另一种方法,因为我在 R 脚本中有许多用于数据更新的循环,这需要太多时间。请帮帮我。
    • 我已经回答了您提出的问题,它不需要for 循环,也不需要任何应用函数系列。它对您共享的数据按预期工作。如果您有其他限制条件,如果您在发帖时未在问题中提及,我们不可能知道。
    猜你喜欢
    • 1970-01-01
    • 2018-10-03
    • 2020-11-14
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2015-07-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多