使用grep帮助R中的数据框子集

时间:2014-01-23 14:45:17

标签: r dataframe grep subset

我无法对数据进行子集化。我希望数据在x列上进行子集化,其中前3个字符以G45开头。

我的数据框:

 x <- c("G448", "G459", "G479", "G406")  
 y <- c(1:4)
 My.Data <- data.frame (x,y)

我试过了:

 subset (My.Data, x=="G45*")

但我不确定如何使用通配符。我也尝试过grep()来找到指标:

 grep  ("G45*", My.Data$x)

但它返回所有4行,而不仅仅是那些以G45开头的行,可能还因为我不确定如何使用通配符。

2 个答案:

答案 0 :(得分:51)

使用[提取非常简单:

grep会为您提供与搜索模式匹配的位置(除非您使用value = TRUE)。

grep("^G45", My.Data$x)
# [1] 2

由于您在单个列的值内搜索,因此实际上对应于行索引。因此,将其与[一起使用(您可以使用My.Data[rows, cols]获取特定的行和列)。

My.Data[grep("^G45", My.Data$x), ]
#      x y
# 2 G459 2

subset的帮助页面显示了如果您希望在grep上使用此功能,可以将greplsubset[一起使用。这是一个例子。

subset(My.Data, grepl("^G45", My.Data$x))
#      x y
# 2 G459 2

从R 3.3起,现在还有startsWith函数,您可以再次使用subset(或上述任何其他方法)。根据该功能的帮助页面,它比使用substringgrepl要快得多。

subset(My.Data, startsWith(as.character(x), "G45"))
#      x y
# 2 G459 2

答案 1 :(得分:0)

您也可以使用stringr软件包

library(dplyr)
library(stringr)
My.Data %>% filter(str_detect(x, '^G45'))

在这种情况下,您可能无法使用'^'(开头)来获得所需的结果