将向量中的模式与数据框中的字符串匹配
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' 上使用 paste
和 collapse
,将其用作 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,]
我有一个数据框,其中包含两种类型的 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' 上使用 paste
和 collapse
,将其用作 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,]