当它们应该是数字时,如何删除 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)
但我得到:
最佳答案
使用 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
的包装器关于用R删除字符串中的字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25788300/