【问题标题】:R grep for a-Z except e-R grep 用于 a-Z,除了 e-
【发布时间】:2013-01-13 16:56:53
【问题描述】:

我有一个data.frame,比如说 5 列和 30 行。我遍历每一列并使用grep 函数通过查找字母a-Z 来识别非数字行。我做了很多测试,它似乎工作正常。但是,我刚刚遇到一个数字是 0.0000000009 的情况,它被 R 翻译成 9e-10。该行/编号被 grep 识别为不是数字,即使它显然是一个数字。我现在的问题是,我怎样才能 grep 字母 a-Z 但排除模式“e-”?这是我的 R 代码:

for(i in 1:ncol(m)) {

    if(length(grep("[a-zA-Z]", m[,1])) > 0) { # do something...}

}

【问题讨论】:

  • 阿伦,感谢您的评论。我认为当列是一个因素时,您的第一个替代解决方案不起作用,因为在因素变量上应用 as.numeric 并不能解决导致 NA 的问题
  • 我认为这很有效......很棒

标签: r regex


【解决方案1】:

只是把它写成答案:

df <- data.frame(x = c(1:5, 9e-6, letters[1:5]), y = c(1e-11, rep("e", 5), 6:10))
df$x <- factor(df$x)
df$y <- factor(df$y)
sapply(df, function(w) which(is.na(as.numeric(as.character(w)))))

忽略来自as.numeric的警告。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-25
    • 2011-10-11
    • 2023-03-29
    • 2010-12-16
    • 2017-05-16
    • 1970-01-01
    相关资源
    最近更新 更多