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

Я использую приведенный ниже кадр данных:

Product.Name = c('BRILINTA','BRILINTA','Brilinta 6','Brilinta 9')
NDC = c(00186077739,00186077660,00186077739,00186077760)
df = cbind(Product.Name,NDC)

У меня есть два списка ниже:

ticagrelor_ndc = c(00186077660,186077739,186077694,186077708,186077760,5515496180,5515496188,6923811346,6923811341)
ticagrelor_name = c('ticagrelor','Brilinta 6','Brilinta 9','Brilinta','BRILINTA')

Я хотел бы выбрать строки во фрейме данных с df $ Product.Name соответствует любому элементу в ticagrelor_name или у которого df $ NDC соответствует любому элементу в ticagrelor_ndc.

Я пробовал следующее:

df[(NDC %in% ticagrelor_ndc) | (Product.Name %in% ticagrelor_name)]
df[sapply(1:nrow(input_data), function(x) all(input_data$NDC %in% ndc_list)),]
subset(df,NDC %in% ndc_list | Product.Name %in% name_list)

Фактические результаты:

1) Совпадение df $ Product.Name с ticagrelor_name работает отлично.2) Сопоставление df $ NDC с ticagrelor_ndc не работает вообще.

Ожидаемый результат: я хотел бы иметь возможность сопоставления на основе df $ Product.Name и df $ NDC.

1 Ответ

1 голос
/ 13 мая 2019

Просто убедитесь, что у вас действительно есть фрейм данных (см. Комментарий @ neilfws) и используйте оператор OR (|) в filter().

library(tidyverse)

df %>% filter(Product.Name %in% ticagrelor_name | NDC %in% ticagrelor_ndc)

# A tibble: 3 x 2
  Product.Name       NDC
  <chr>            <dbl>
1 BRILINTA     186077739
2 BRILINTA     186077660
3 Brilinta 9   186077760

Примечание. Предоставленные вами данные, по-видимому, на самом деле не дают никаких неудачных совпадений - вот модифицированный набор данных, демонстрирующий, как строка "Brilinta 6" отфильтровывается, если она не совпадает ни с _nameили _ndc:

Product.Name <- c('BRILINTA','BRILINTA','Brilinta 6','Brilinta 9')
NDC = c(00186077739,00186077660,00186077739,00186077760)
ticagrelor_ndc <- c(00186077660,186077694,186077708, 186077760,
                    5515496180,5515496188,6923811346,6923811341)
ticagrelor_name <- c('ticagrelor','Brilinta 9', 'Brilinta','BRILINTA')
df <- data.frame(Product.Name, NDC)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...