我无法对数据进行子集化。我希望数据在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开头的行,可能还因为我不确定如何使用通配符。
答案 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
上使用此功能,可以将grepl
和subset
与[
一起使用。这是一个例子。
subset(My.Data, grepl("^G45", My.Data$x))
# x y
# 2 G459 2
从R 3.3起,现在还有startsWith
函数,您可以再次使用subset
(或上述任何其他方法)。根据该功能的帮助页面,它比使用substring
或grepl
要快得多。
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'))
在这种情况下,您可能无法使用'^'
(开头)来获得所需的结果