使用grep帮助R中的数据帧子集
我无法对数据进行子集设置。我想把数据子集放在x列上,前3个字符从G45开始 我的数据帧:使用grep帮助R中的数据帧子集,r,dataframe,subset,R,Dataframe,Subset,我无法对数据进行子集设置。我想把数据子集放在x列上,前3个字符从G45开始 我的数据帧: x <- c("G448", "G459", "G479", "G406") y <- c(1:4) My.Data <- data.frame (x,y) 但我不确定如何使用通配符。我还尝试了grep()来查找标记: grep ("G45*", My.Data$x) 但它返回所有4行,而不仅仅是G45开头的行,这可能也是因为我不确定如何使用通配符。使用[提取: grep
x <- c("G448", "G459", "G479", "G406")
y <- c(1:4)
My.Data <- data.frame (x,y)
但我不确定如何使用通配符。我还尝试了grep()来查找标记:
grep ("G45*", My.Data$x)
但它返回所有4行,而不仅仅是G45开头的行,这可能也是因为我不确定如何使用通配符。使用
[
提取:
grep
将为您提供与搜索模式匹配的位置(除非您使用value=TRUE
)
由于您是在单个列的值内搜索,因此它实际上对应于行索引。因此,将其与[
一起使用(您可以使用My.Data[rows,cols]
来获取特定的行和列)
subset
的帮助页面显示了如果您更喜欢使用此函数而不是[
,则如何将grep
和grepl
与subset
一起使用。下面是一个示例
subset(My.Data, grepl("^G45", My.Data$x))
# x y
# 2 G459 2
从R3.3开始,现在还有
startsWith
函数,您可以再次使用subset
(或上述任何其他方法)。根据该函数的帮助页面,它比使用substring
或grepl
要快得多
subset(My.Data, startsWith(as.character(x), "G45"))
# x y
# 2 G459 2
您也可以使用
stringr
软件包
library(dplyr)
library(stringr)
My.Data %>% filter(str_detect(x, '^G45'))
在这种情况下,您不能使用“^”
(以开头)来获得所需的结果
subset(My.Data, grepl("^G45", My.Data$x))
# x y
# 2 G459 2
subset(My.Data, startsWith(as.character(x), "G45"))
# x y
# 2 G459 2
library(dplyr)
library(stringr)
My.Data %>% filter(str_detect(x, '^G45'))