我有一个' Agency_Reference'包含列' agency_lookup'的表格,包含200个字符串条目,如下所示:
我有一个数据框' TEST'有一百万行包含一个'广告系列'具有以下条目的列:
我想遍历参考表中的每个条目,找到每个广告系列列条目中的字符串,并在表格中创建一个新的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 _-----增量
答案 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
- 循环。