我花了几个小时来解决基于向量中的搜索模式对数据帧行进行子集化的问题。我是R.的新手。也许这很容易,但我不能自己做,而且我无法在stackoverflow中找到解决方案
假设我有来自R的mtcars数据。
我希望使用一些汽车名称对行进行子集化,例如仅限马自达,福特和雪佛兰。所以我有一个字符向量car.names,其中包含我想要分组的汽车名称:
car.names <- c("Mazda", "Ford", "Chevrolet")
问题是:如何根据car.names中的条件对mtcars行进行子集化?
答案 0 :(得分:3)
我认为您希望将grep
搜索与索引相结合。我将在mtcars
:
car.names <- "Mazda|Ford|Chevrolet"
filtered <- mtcars[grepl(car.names, rownames(mtcars)),]
filtered
# mpg cyl disp hp drat wt qsec vs am gear carb
# Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
# Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
# Ford Pantera L 15.8 8 351 264 4.22 3.170 14.50 0 1 5 4
答案 1 :(得分:1)
alexwhan的回答是我接近这个问题的方式,但我想我会分享这个答案以防其他人有用:你可以考虑使用Vectorize
来创建{{1}的“矢量化”版本}}:
grep
这是输出的样子:
vGrep <- Vectorize(grep, vectorize.args="pattern")
您可以vGrep(car.names, rownames(mtcars))
# $Mazda
# [1] 1 2
#
# $Ford
# [1] 29
#
# $Chevrolet
# integer(0)
输出将值用于unlist
data.frame