【问题标题】:Optimization of R Data.table combination with for loop functionR Data.table 组合与 for 循环功能的优化
【发布时间】:2016-07-28 07:22:28
【问题描述】:

我有一个包含列“agency_lookup”的“Agency_Reference”表,其中包含 200 个字符串条目,如下所示:

  1. 阿尔法
  2. 测试版
  3. 伽马等..

我有一个包含一百万行的数据框“TEST”,其中包含一个“Campaign”列,其中包含以下条目:

  1. Alpha_xt2010
  2. alpha_xt2014
  3. Beta_xt2016 等。

我想遍历参考表中的每个条目,并查找每个活动列条目中存在的字符串,并在表中创建一个新的机构标识符列变量。

我当前的代码如下,执行起来很慢。请求有关如何优化的指导。我想学习如何以 data.table 的方式进行操作

 Agency_Reference <- data.frame(agency_lookup = c('alpha','beta','gamma','delta','zeta'))
 TEST <- data.frame(Campaign = c('alpha_xt123','ALPHA345','Beta_xyz_34','BETa_testing','code_delta_'))
 TEST$agency_identifier <- 0
 for (agency_lookup in  as.vector(Agency_Reference$agency_lookup)) {
 TEST$Agency_identifier <- ifelse(grepl(tolower(agency_lookup), tolower(TEST$Campaign)),agency_lookup,TEST$Agency_identifier)}

预期输出:

广告系列----Agency_identifier

alpha_xt123---alpha

ALPHA34----阿尔法

Beta_xyz_34----beta

BETa_testing----beta

code_delta_-----delta

【问题讨论】:

  • 请展示一个可重现的小例子和预期的输出
  • @akrun :我发布的初始代码有错误。因此编辑了代码以显示我当前使用的实际代码。如果需要其他信息,请告诉我,以帮助完成此查询。
  • 您的代码给出了错误,尤其是。 for 循环。预期输出是多少

标签: r for-loop data.table


【解决方案1】:

试试

TEST <- data.frame(Campaign = c('alpha_xt123','ALPHA345','Beta_xyz_34','BETa_testing','code_delta_'))

pattern = tolower(c('alpha','Beta','gamma','delta','zeta'))

TEST$agency_identifier <- sub(pattern = paste0('.*(', paste(pattern, collapse = '|'), ').*'),
                              replacement = '\\1',
                              x = tolower(TEST$Campaign))

【讨论】:

    【解决方案2】:

    这本身不会回答您的问题,但据我了解,您想剖析Campaign 列并使用它提供的值做一些事情。

    看看Tidy data,更具体地说是“多个变量存储在一列中”部分。我认为使用tidyr::separate 会取得很大的进步。这样你就不必使用for-loop。

    【讨论】:

    • 谢谢贾斯珀。但是活动栏的格式并不像我在示例中给出的那样标准。因此我不得不使用 grepl。
    • 一般来说,这种事情作为评论比作为答案更好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-11
    • 1970-01-01
    • 2017-09-20
    • 1970-01-01
    • 2017-01-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多