簡體   English   中英

使用 grep 幫助 R 中的數據框子集

[英]Using grep to help subset a data frame in R

我在對數據進行子集化時遇到問題。 我想要在 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 開頭的行,可能也是因為我不確定如何使用通配符。

使用[來提取非常簡單:

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的幫助頁面顯示了如何將grepgreplsubset使用。 這是一個例子。

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

您也可以使用stringr

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

在這種情況下,您可能不會使用'^' (開頭為),以獲得您需要的結果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM