我有一个数据框,其中包含两个类型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)]
但它没有用
答案 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,]