Как удалить элементы списка, если этих элементов нет в другом списке - PullRequest
0 голосов
/ 23 октября 2019

По сути, у меня есть список компаний (помеченный как список A), и у меня есть большой контрольный список (помеченный как список B). Я хочу спросить, что если элементы списка A также есть в списке B. Некоторые идентичные компании имеют небольшую разницу, поэтому я должен использовать нечеткое сопоставление. К счастью, я успешно нашел элементы, которые находятся в A, но не в B. Но я не знаю, как удалить его, не вызывая хаоса. (Кажется, что это легко вызывает граничную ошибку)

company <- read.table(text = "
           CompanyName
          'MERCK SHARP & DOHME CORPORATION'
          'GILEAD SCIENCES INC'
          'BOEHRINGER INGELHEIM PHARMACEUTICALS, INC.'
          'ABBVIE, INC.'
          'JANSSEN SCIENTIFIC AFFAIRS, LLC'
          'ASAHI INTECC CO., LTD.'
   ", header = TRUE, stringsAsFactors = FALSE)
Report <- c('MERCK ','BOEHRINGER INGELHEIM','ROCHE','ASAHI')
sapply(lapply(Report, function(x) agrepl(x, company$CompanyName, max.distance=0.1)), max)

Выше приведены мои воспроизводимые данные и мой нечеткий код соответствия, который возвращает

[1] 1 1 0 1

Но я не знаю, как удалитьКомпания на этой позиции 0. Является ли беговая петля на каждом элементе хорошей идеей? Я хочу, чтобы мой результат был

'MERCK ','BOEHRINGER INGELHEIM','ASAHI'

1 Ответ

0 голосов
/ 23 октября 2019

Я определил следующую функцию, которая возвращает форму элемента Report, которая соответствует элементу z

myfunc = function(z){Report[which(lapply(Report,function(y){agrepl(y,z,max.distance = 0.1)})%>%unlist)]}

, а затем по очереди применяется к каждому элементу вашего списка. Я использовал unlist и символ канала %>% из пакета magrittr для преобразования структур списков в векторы.

lapply(company$CompanyName,myfunc) %>% unlist 

Если вы хотите, чтобы отчет был переменной, чтобы использовать функцию для разных отчетовВы можете определить функцию

myfunc2 = function(z,report){report[which(lapply(report,function(y){agrepl(y,z,max.distance = 0.1)})%>%unlist)]}

, а затем вызвать ее с параметром Report as и дополнительным параметром для

lapply(company$CompanyName,myfunc2,Report) %>% unlist 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...