使用R删除字符串中的字符

时间:2014-09-11 13:06:56

标签: r string

当它们应该是数字时,如何删除DF中包含字母的行?表格示例可能是:

DT = data.table(x=c("b","b","b","a","a"),v=rnorm(5), j=c("122","1223","g21bg","43","534"))
DF=data.frame(DT)

我需要得到:

  x          v     j
 b  0.4220836   122
 b -1.9492471  1223
 a  1.4615694    43
 a -0.2294917   534

可以是任何非数字字符。 我试过了

library(stringr)
str_detect(DF$j, letters)

但我明白了:

  

check_pattern(pattern,string)中的错误:字符串和字符串的长度   模式不兼容

1 个答案:

答案 0 :(得分:5)

使用grepl

DF[!grepl("[A-Za-z]", DF$j), ]
##  x          v    j
##1 b -1.3157423  122
##2 b -1.3514456 1223
##4 a  0.7508370   43
##5 a  0.3476453  534

但是,实际上,你有一个data.table对象,为什么要将它转换为data.frame?这对我没有任何意义。您可以在原始data.table

中执行相同的操作
DT[!grepl("[A-Za-z]", j), ]
#    x           v    j
# 1: b  0.03008628  122
# 2: b -0.72063192 1223
# 3: a  0.94851720   43
# 4: a -0.72384496  534

或使用grep结合invert = TRUE

DT[grep("[A-Za-z]", j, invert = TRUE), ]

或者,如果您想使用str_detect(就像在帖子中一样)

library(stringr)
DT[!str_detect(j, "[A-Za-z]"), ]

虽然str_detect只是grepl

的包装器