如何从数据框中选择与向量中的任何元素匹配的行?

时间:2019-05-13 00:21:01

标签: r

我正在使用以下数据框:

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 个答案:

答案 0 :(得分:1)

只需确保您确实有一个数据框(请参阅@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) 行:

scrapy shell "https://www.newegg.com/Product/Product.aspx?Item=06T-0045-00045"