Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用grep帮助R中的数据帧子集_R_Dataframe_Subset - Fatal编程技术网

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

使用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列上,前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
将为您提供与搜索模式匹配的位置(除非您使用
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'))