在R数据帧或向量中查找非数字数据

时间:2014-01-17 21:21:17

标签: r dataframe

我用read.csv()阅读了一些冗长的数据,令我惊讶的是数据是作为因素而不是数字出现的,所以我猜测数据中必须至少有一个非数字项。我怎样才能找到这些物品的位置?

例如,如果我有以下数据框:

df <- data.frame(c(1,2,3,4,"five",6,7,8,"nine",10))

我想知道第5行和第9行有非数字数据。我该怎么做?

2 个答案:

答案 0 :(得分:22)

df <- data.frame(c(1,2,3,4,"five",6,7,8,"nine",10))

诀窍是知道通过as.numeric(as.character(.))转换为数字会将非数字转换为NA

which(is.na(as.numeric(as.character(df[[1]]))))
## 5 9

(仅使用as.numeric(df[[1]])不起作用 - 只会丢弃数字代码的级别)。

您可以选择取消警告:

which.nonnum <- function(x) {
   which(is.na(suppressWarnings(as.numeric(as.character(x)))))
}
which.nonnum(df[[1]])

为了更加小心,您还应该在转换前检查值是否为NA:

which.nonnum <- function(x) {
   badNum <- is.na(suppressWarnings(as.numeric(as.character(x))))
   which(badNum & !is.na(x))
}

答案 1 :(得分:2)

另一种方法是检查向量中的哪些条目包含除数字以外的任何字符:

df <- data.frame(c(1,2,3,4,"five",6,7,8,"nine",10))
which(!grepl('^[0-9]',df[[1]]))
## 5 9