Цикл grepl () через data.table (R)
У меня есть набор данных, хранящийся в виде data.tableDT
это выглядит так:
print(DT)
category industry
1: administration admin
2: nurse practitioner truck
3: trucking truck
4: administration admin
5: warehousing nurse
6: warehousing admin
7: trucking truck
8: nurse practitioner nurse
9: nurse practitioner truck
Я хотел бы сократить таблицу только до тех строк, где отрасль соответствует категории. Мой общий подход заключается в использованииgrepl()
регулярное выражение соответствует строке'^{{INDUSTRY}}[a-z ]+$'
и каждый рядDT$category
с каждым соответствующим рядомDT$industry
вставлен вместо{{INDUSTRY}}
в строке регулярного выражения, используяinfuse()
, Я изо всех сил пытался найти изящное решение для data.table, которое бы правильно просматривало таблицу и сравнивало строки, поэтому я прибегнул к циклу for, чтобы выполнить работу:
template <- "^{{IND}}[a-z ]+$"
DT[,match := FALSE,]
for (i in seq(1,length(DT$category))) {
ind <- DT[i]$industry
categ <- d.daily[i]$category
if (grepl(infuse(IND=ind,template),categ)){
DT[i]$match <- TRUE
}
}
DT<- DT[match==TRUE]
print(DT)
category industry
1: administration admin
2: trucking truck
3: administration admin
4: trucking truck
5: nurse practitioner nurse
Однако я уверен, что это можно сделать лучше. Любые предложения о том, как я мог бы достичь этого результата, используя функциональность пакета data.table? Насколько я понимаю, в этом контексте подход, использующий пакет, вероятно, будет более эффективным, чем цикл for.