使用for循环函数优化R Data.table组合

时间:2016-07-28 07:22:28

标签: r for-loop data.table

我有一个' Agency_Reference'包含列' agency_lookup'的表格,包含200个字符串条目,如下所示:

  1. 阿尔法
  2. 测试
  3. gamma等..
  4. 我有一个数据框' TEST'有一百万行包含一个'广告系列'具有以下条目的列:

    1. Alpha_xt2010
    2. alpha_xt2014
    3. Beta_xt2016等..
    4. 我想遍历参考表中的每个条目,找到每个广告系列列条目中的字符串,并在表格中创建一个新的agency_identifier列变量。

      我当前的代码如下,执行速度慢。请求有关如何优化相同的指导。我想学习如何以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 ---阿尔法

      ALPHA34 ----阿尔法

      Beta_xyz_34 ----测试

      BETa_testing ----测试

      code_delta _-----增量

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分:0)

这本身不会回答您的问题,但根据我的理解,您希望剖析Campaign列并对其提供的值执行某些操作。

查看Tidy data,更具体地说是部分&#34;多个变量存储在一列&#34;中。我认为您将使用tidyr::separate取得一些进步。这样你就不必使用for - 循环。