簡體   English   中英

R - 從包含數字的向量元素中刪除

[英]R - Remove from vector elements containing a number

我有一些以農村屬性命名的文件,如下所示:

v1 <- c("Badger", "Hill", "Farm", "1.json")
v2 <- c("Buffalo", "Pass", "Farm", "2.json")
> v1
[1] "Badger" "Hill"   "Farm"   "1.json"
> v2
[1] "Buffalo" "Pass"    "Farm"    "2.json"

我設法拆分了文件名元素,但我只想保留那些不包含任何數字的元素。 所需的 output 將是:

> v1
[1] "Badger" "Hill"   "Farm"  
> v2
[1] "Buffalo" "Pass"    "Farm"

很簡單,但我就是想不通。 我怎樣才能做到這一點?

這應該這樣做:

v1 = v1[!grepl("[0-9]", v1)]
v2 = v2[!grepl("[0-9]", v2)]

grepl檢測模式,正則表達式模式[0-9]將檢測任何數字。

"^(?..*({{STRING}}))"是一個很好的正則表達式指定not

v1 <- c("Badger", "Hill", "Farm", "1.json")
v2 <- c("Buffalo", "Pass", "Farm", "2.json")


grep("^(?!.*(\\d))", v1, value = TRUE, perl = TRUE)
## [1] "Badger" "Hill"   "Farm"  

grep("^(?!.*(\\d))", v1, value = TRUE, perl = TRUE)
## [1] "Badger" "Hill"   "Farm" ```

我們可以使用str_subset中的stringr

library(stringr)
str_subset(v1, "^\\D+$")
[1] "Badger" "Hill"   "Farm" 
str_subset(v2, "^\\D+$")
[1] "Buffalo" "Pass"    "Farm"   

或者在base R中可以指定invert = TRUEgrep

> grep("\\d", v1, invert = TRUE, value = TRUE)
[1] "Badger" "Hill"   "Farm"  
> grep("\\d", v2, invert = TRUE, value = TRUE)
[1] "Buffalo" "Pass"    "Farm"   

我們可以試試這個

> grep("^\\D+$", v1, value = TRUE)
[1] "Badger" "Hill"   "Farm"  

> grep("^\\D+$", v2, value = TRUE)
[1] "Buffalo" "Pass"    "Farm" 

暫無
暫無

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

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