从 R 中包含数字的向量元素中删除

Remove from vector elements containing a number in R

我有一些以农村财产命名的文件,如下所示:

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"

我设法拆分了文件名元素,但我只想保留那些不包含任何数字的元素。所需的输出将是:

> 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] 将检测任何数字。

我们可以使用 str_subset 来自 stringr

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

或者在base R中可以在grep

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

"^(?!.*({{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" ```

我们可以试试这个

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

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