将向量中的模式与数据框中的字符串匹配

matches patterns in vector with strings in data frame

我有一个数据框,其中包含两种类型的 cols 和带有名称的向量。 select 数据框中的某些行如何与向量字符串匹配。

name = c("p4@HPS1", "p7@HPS2", "p4@HPS3", "p7@HPS4", "p7@HPS5", "p9@HPS6", "p11@HPS7", "p10@HPS8", "p15@HPS9")
expression = c(118.84, 90.04, 106.6, 104.99, 93.2, 66.84, 90.02, 108.03, 111.83)
dataset <- as.data.frame(cbind(name, expression))
nam <- c("HPS5", "HPS6", "HPS9", "HPS2")

函数应该return日期框只针对指定的行 我试试 dataset[mapply(grepl,nam,dataset$name)] 但是没用

我们可以在 'nam' 上使用 pastecollapse,将其用作 grep 中的 pattern 参数,获取索引和子集 'dataset'

dataset[grep(paste(nam, collapse="|"), dataset$name),]

如果我们使用 OP 的代码,请将 'name' 列包裹在 list 中,否则 mapply 将遍历 'name' 的各个元素,并且作为'name' 和 'nam' 中的数字元素不相同,这将引发有关 longer argument not a multiple of length of shorter 的警告。 mapply 将 return 一个逻辑矩阵,我们从中获取 rowSums 并检查它是否大于 0 以获得用于对行进行子集化的逻辑向量。

dataset[rowSums(mapply(grepl, nam, list(dataset$name)))>0,]