1
我嘗試使用grepl
嘗試子集數據框時遇到了一些意外的行爲(至少對我來說)。下面是一些例子來說明這個問題:意外的正則表達式匹配在R
> myVec <- c("ISB*", "ISNB*")
> myDF <- data.frame(Source = rep(myVec, 5, 2), Value = 1:10)
> print(myDF)
Source Value
1 ISB* 1
2 ISNB* 2
3 ISB* 3
4 ISNB* 4
5 ISB* 5
6 ISNB* 6
7 ISB* 7
8 ISNB* 8
9 ISB* 9
10 ISNB* 10
> myDF.b <- myDF[grepl("ISB*", myDF$Source), ]
> print(myDF.b)
Source Value
1 ISB* 1
2 ISNB* 2
3 ISB* 3
4 ISNB* 4
5 ISB* 5
6 ISNB* 6
7 ISB* 7
8 ISNB* 8
9 ISB* 9
10 ISNB* 10
> myDF.nb <- myDF[grepl("ISNB*", myDF$Source), ]
> print(myDF.nb)
Source Value
2 ISNB* 2
4 ISNB* 4
6 ISNB* 6
8 ISNB* 8
10 ISNB* 10
當我做是myDF的子集創建myDF.b,我用grepl("ISB*", myDF$Source), ]
。現在,我期望的是它只抓取了ISB*
行,但它抓住了所有這些行。我意識到ISNB*
包含的所有字母與ISB*
的順序相同,但我很驚訝地看到中間的N
沒有使grepl
與匹配它。我期望ISB*N
與ISB*
匹配,但不會與中間的N
匹配。
這是正常行爲還是有我缺少的論據?先謝謝你。
該死,這是顯而易見的。我現在覺得很愚蠢。謝謝! – giraffehere
另外,'fixed = TRUE' –
它工作'myDF [grepl(「ISB *」,myDF $源,固定= TRUE),]' –