R: Эффективный поиск таблицы на нескольких столбцах - PullRequest
0 голосов
/ 13 марта 2020

У меня есть два кадра данных в R - TABLEA (~ 6000 строк) и TABLEB (~ 30000 строк). Все столбцы имеют символьный формат.

TABLEA: COL1 - COL2 - COL3 - COL4

TABLEB: COL1 - COL2 - COL3 - COL4 - COL5 - COL6 - COL7

Я бы например, добавить 5-й столбец в TABLEA, взяв значения COL1-COL4 для каждой строки в TABLEA и выполнив сопоставление регулярного выражения для TABLEB для тех же столбцов. Затем следует добавить значение COL5 из ​​TABLEB в соответствующую строку TABLEA на COL5.

Я написал для этого функцию и попробовал метод fop-l oop и mapply, но он требует очень долго бегать. Я подозреваю, что моя функция для выполнения поиска ужасно неэффективна и что должен быть лучший способ сделать это.

Любые полезные предложения или советы, как мне этого добиться?

getValue<-function(input1, input2, input3, input4) 
{
  #filter TABLEB on 4 columns matching the 4 inputs above.
  FILTERED <- TABLEB %>% filter(str_detect(input1, COL1)) %>% filter(str_detect(input2, COL2)) %>%  
    filter(str_detect(input3, COL3)) %>% filter(str_detect(input4, COL4)) %>% 
    #select the 1st value from column 5, in case of multiple matches
    select(COL5) %>%  head(1)

  VALUE<-as.character(FILTERED$COL5)

  #if no match found
  if(length(VALUE) == 0) VALUE = "UNKNOWN"

  return(VALUE)
}

#for-loop method
for(i in 1:nrow(TABLEA)) {
  TABLEA[i, ]$COL5<-getValue(TABLEA[i, ]$COL1, TABLEA[i, ]$COL2, TABLEA[i, ]$COL3, TABLEA[i, ]$COL4)  

#mapply method
TABLEA$COL5<-mapply(getValue, TABLEA$COL1, TABLEA$COL2, TABLEA$COL3, TABLEA$COL4)
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...