2017-02-10 33 views
1

我有许多数据帧,其中所有数据都是字符。我可以猜测,一个包含数字的var应该改为数字数据类型。我有100列,所以我不想输出每个改变它们。 是否有另一种方法来自动执行此过程并扫描一列数据,检查该字符是否具有数字值并将其更改为字符类型的数字类型?R检查数字的字符值并自动更改var数据类型

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) 

回答

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 
+0

我正落类似'sapply(名(DF),函数(x)的任何(is.na(as.numeric(as.character(DF [,X])))))'路线 – SymbolixAU

+0

工作。这是一个方便的功能。 –

相关问题