2014-09-11 77 views
3

如何删除DF中具有字母的行,当它们应该是数字时?一个表的例子可能是:使用R去除字符串中的字符

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(模式,字符串):字符串的长度和 模式不兼容

+0

一个可重复的例子会很棒。检查此:http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – Henk 2014-09-11 14:00:52

回答

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 

或者使用grepinvert = TRUE

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

合并或者,如果你想(在您的文章等)使用str_detect

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

虽然str_detect只是grepl的包装