2017-02-10 2 views
1

すべてのデータが文字であるデータフレームが多数あります。数値を含むvarを数値データ型に変更する必要があります。私は100の列を持っているので、私はそれを変更するためにそれぞれを変更する必要はありません。 このプロセスを自動化し、データの列をスキャンする別の方法は、文字に数値があり、それを文字型から数値型に変更するかどうかを確認しますか?私は、各列の/ varR数値の文字値をチェックし、自動的にvarデータ型を変更します。

df$rank <- as.numeric(df$rank) 

のためにこれを行うにはしたくない

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) 

私は、我々が持つ関数を書くことができ、この

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 
Iは、同様 `sapplyダウンし
+0

(名前(DF)を、関数(x)は任意(is.na(as.numeric(as.character(DF [X])))))'経路 – SymbolixAU

+0

それは動作します。これは便利な機能です。 –

関連する問題