R检查数字的字符值并自动更改var数据类型

时间:2017-02-10 02:30:28

标签: r string numeric

我有很多数据框,其中所有数据都是字符。我猜可以将包含数字的var更改为数字数据类型。虽然我有100多个专栏,所以我不想输入每个专栏来改变它。 是否有另一种方法可以自动执行此过程并扫描一列数据,检查字符是否具有数字值并将其从字符类型更改为数字类型?

employee <- c('John Doe','Peter Gynn','Jolie Hope')
salary <- c("21000", "23400", "26800")
gender <- c("M", "M", "F")
rank <- c("5", "109", "2")

df <- data.frame(employee, salary, gender, rank)

我不想为每列/ var

执行此操作
df$rank <- as.numeric(df$rank)

我想做这样的事情

i <- sapply(df, is.vector.of.columns.contaning.numeric.values)
df[i] <- lapply(df[i], as.numeric)

1 个答案:

答案 0 :(得分:3)

我们可以用数字条件写一个函数。它的工作原理是尝试as.numeric并检查它是否返回NA,如果是,则表示该值不能强制转换为明确的数字。发生这种情况时,该函数将保持列不变。

smartConvert <-  function(x) {
  if(any(is.na(as.numeric(as.character(x))))) x else as.numeric(x)
}

df[] <- lapply(df, smartConvert)
str(df)
# 'data.frame': 3 obs. of  4 variables:
#  $ employee: Factor w/ 3 levels "John Doe","Jolie Hope",..: 1 3 2
#  $ salary  : num  1 2 3
#  $ gender  : Factor w/ 2 levels "F","M": 2 2 1
#  $ rank    : num  3 1 2