基于数据框和向量之间的部分匹配过滤行
Filtering rows based on partial matching between a data frame and a vector
我有一个数据框,我想根据第一列中的名称与向量中的名称的部分匹配来过滤它。
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)
我们可以 paste
将 'vector' 的元素合并为由 |
折叠的单个字符串,并在 grepl
或 str_detect
到 [=16] 中使用它=] 行数
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))
我有一个数据框,我想根据第一列中的名称与向量中的名称的部分匹配来过滤它。
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)
我们可以 paste
将 'vector' 的元素合并为由 |
折叠的单个字符串,并在 grepl
或 str_detect
到 [=16] 中使用它=] 行数
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))