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

时间:2016-09-19 08:41:35

标签: r grepl

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

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")

该函数应仅返回指定行的日期框 我试试  dataset[mapply(grepl,nam,dataset$name)] 但它没有用

1 个答案:

答案 0 :(得分:1)

我们可以在'nam'上使用paste collapse,在pattern中将其用作grep参数,获取索引并将'数据集'子集

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

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

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