[英]Optimization of R Data.table combination with for loop function
I have a 'Agency_Reference' table containing column 'agency_lookup', with 200 entries of strings as below : 我有一个“ Agency_Reference”表,其中包含“ agency_lookup”列,其中包含200个字符串条目,如下所示:
I have a dataframe 'TEST' with a million rows containing a 'Campaign' column with entries such as : 我有一个数据框“ TEST”,其中包含一百万行,其中包含“ Campaign”列,其中包含以下条目:
i want to loop through for each entry in reference table and find which string is present within each campaign column entries and create a new agency_identifier column variable in table. 我想遍历参考表中的每个条目,并找到每个广告系列列条目中存在的字符串,并在表中创建一个新的agency_identifier列变量。
my current code is as below and is slow to execute. 我当前的代码如下,执行起来很慢。 Requesting guidance on how to optimize the same.
请求有关如何进行优化的指南。 I would like to learn how to do it in the data.table way
我想学习如何以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)}
Expected Output : 预期产量:
Campaign----Agency_identifier 广告活动---- Agency_identifier
alpha_xt123---alpha alpha_xt123 --- alpha
ALPHA34----alpha ALPHA34 ----阿尔法
Beta_xyz_34----beta Beta_xyz_34 ---- beta
BETa_testing----beta BETa_testing ----测试版
code_delta_-----delta code_delta _-----三角洲
Try 尝试
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))
This will not answer your question per se, but from what I understand you want to dissect the Campaign
column and do something with the values it provides. 这本身并不能回答您的问题,但是据我了解,您希望剖析“
Campaign
列,并使用其提供的值进行处理。
Take a look at Tidy data , more specifically the part "Multiple variables stored in one column". 看一下Tidy数据 ,更具体地说是“在一个列中存储多个变量”部分。 I think you'll make some great progress using
tidyr::separate
. 我认为您将使用
tidyr::separate
取得很大的进步。 That way you don't have to use a for
-loop. 这样,您不必使用
for
-loop。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.