我正在使用以下数据框:
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进行匹配。
答案 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"