2017-02-10 7 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) 
우리가 가진 기능을 쓸 수 있습니다 내가 각 열에 대해이 작업을 수행하고 싶지 않아

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

내가이

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

답변

3

그런 짓을하고 싶습니다/var에 숫자 조건. 그것은 as.numeric을 시도하여 작동하고 NA을 리턴하는지 검사합니다. 그렇다면 값이 명확한 숫자로 강제 변환 될 수 없음을의 L합니다. 이 경우 함수는 열을 그대로 유지합니다.

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

그거야. 이것은 편리한 기능입니다. –