[英]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
的幫助頁面顯示了如何將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
您也可以使用stringr
包
library(dplyr)
library(stringr)
My.Data %>% filter(str_detect(x, '^G45'))
在這種情況下,您可能不會使用'^'
(開頭為),以獲得您需要的結果
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.