基于数据帧和向量之间的部分匹配来过滤行

问题描述 投票:0回答:1

我有一个数据框,并希望根据第一列中的名称与向量中的名称的部分匹配来对其进行过滤。

nam <- c('mmu_mir-1-3p','mmu_mir-1-5p','mmu-mir-3-5p','mir-4','mmu-mir-6-3p') #factor
aa <- c('12854','36','5489','54485','2563') #numeric
df <- data.frame(nam,aa)

vector <- c('mir-1','mir-3','mir-6')

我需要在新数据帧中包含df$nam中的名称与vector中的名称部分匹配的行。因此new_df应该看起来像这样。

new_nam <- c('mmu_mir-1-3p','mmu_mir-1-5p','mmu-mir-3-5p','mmu-mir-6-3p')  #factor
new_aa <- c('12854','36','5489','2563')  #numeric
new_df <- data.frame(new_nam,new_aa)
r dataframe filter match partial
1个回答
0
投票

我们可以将'vector'的元素paste分解成单个字符串,并用|折叠起来,并在greplstr_detectfilter中使用行

library(dplyr)
library(stringr)
df %>% 
   filter(str_detect(nam, str_c(vector, collapse="|")))
#           nam    aa
#1 mmu_mir-1-3p 12854
#2 mmu_mir-1-5p    36
#3 mmu-mir-3-5p  5489
#4 mmu-mir-6-3p  2563

base R中,可以用subset/grepl来完成>

subset(df, grepl(paste(vector, collapse= "|"), nam))
© www.soinside.com 2019 - 2024. All rights reserved.