2017-02-10 89 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

工作。這是一個方便的功能。 –

相關問題