2012-12-04 6 views
23

이 사이트에 비슷한 질문이 있다는 것을 알고 있지만 어느 누구도 내 질문에 충분히 대답하지 않는 것 같습니다.csv 파일을 R 숫자로 가져 오기 문자로 읽음

이것은 내가 지금까지 무엇을했는지 있습니다 :

은 내가 Excel에서 열 CSV 파일을 가지고있다. 나는 새로운 컬럼 "A"를 얻기 위해 대수적으로 컬럼을 조작한다. read.csv()을 사용하여 파일을 R로 가져오고 A 열의 항목이 요인으로 저장됩니다. 숫자로 저장하려고합니다. 나는 홍콩 오오이 위에 링크 된 페이지에 제안하지만,이의 항목을 일으키지 않는, read.csv()의 인수로 stringsAsFactors = FALSE을 포함

Imported a csv-dataset to R but the values becomes factors

조언에 따라 : 나는 주제에이 질문을 찾을 수 열 A는 숫자 값으로 저장됩니다.

그러나 How to convert a factor to an integer\numeric without a loss of information?

, 나는 열 항목의 항목이되도록 파일을 가져올 수있는 방법, 즉 깨끗한 솔루션을 싶습니다

가능한 솔루션은 다음 페이지에 주어진 조언을 사용하는 것입니다 숫자 값으로 저장됩니다.

도움을 청합니다! read.csv(... stringsAsFactors=FALSE)를 사용하여 R에 (어떤 조작을 능가 전) 원시 파일 읽기 : 새 열을 생성하는 Excel에서 일을 무엇이든 대수

+5

Excel에서 텍스트 파일을 뿌리기됩니다. 텍스트 편집기에서 csv를 열어 Excel에서 잘못된 부분이 무엇인지 확인하십시오. –

+2

십진 기호에 문제가 있습니까? CSV 파일에 사용 된 십진 기호를 확인하십시오. 'dec.' 옵션으로'read.csv'에서 십진법 기호로 사용할 문자를 지정할 수 있습니다. 자세한 정보는'? read.csv'를보십시오. – djhurio

+0

여호수아가해야 할 일을 말하면, CSV 헤더를 파괴하는 경향이 탁월합니다. 일반적으로 나는 옵션을 사용한다 (stringsAsFactors = FALSE). –

답변

22

아마

다음을 시도하십시오 R.에서보다 효율적으로 수행 할 수 . [그래도 작동하지 않는다면 ?read.table (어느 read.csv로 끝남)을 보시고 다른 근본적인 문제가있을 수 있습니다]. 예를 들어

:

delim = "," # or is it "\t" ? 
    dec = "." # or is it "," ? 
    myDataFrame <- read.csv("path/to/file.csv", header=TRUE, sep=delim, dec=dec, stringsAsFactors=FALSE) 
다음

이의이 숫자 열을 가정 해 봅시다은

myDataFrame[, 4] <- as.numeric(myDataFrame[, 4]) # you can also refer to the column by "itsName" 


마지막으로, 당신은 R에서 같은 업무를 수행하기에 어떤 도움이 필요하면 당신 '열 4 엑셀로 만들었습니다. 당신을 도울 수있는 사람들이 여기에 있습니다.

+0

감사합니다. 이것은 매우 유용한 체크리스트입니다. 이 경우, 문제는 Excel과 달리 R에서 대수 조작을 수행하여 해결되었습니다. – user32259

+0

아무 문제없이 @ user32259, 도와 줘서 기쁩니다. –

9

read.table (및 그 친척) i t는 누락 값 NA으로 해석 될 문자열을 지정하는 na.strings 인수입니다. 기본값은 na.strings = "NA"

입니다. 그렇지 않은 숫자 변수 열의 누락 값이 "NA"이 아닌 다른 값으로 코딩 된 경우 (예 : "."또는 "N/A"이면이 행은 character으로 해석되고 전체 열은 character으로 변환됩니다.

따라서 누락 된 값이 "NA"이 아닌 경우 na.strings에 지정해야합니다.

3

큰 데이터 세트 (예 :높은 수의 열을 가진 데이터 세트)를 사용하는 경우 위에 언급 된 솔루션은 수동으로 성 가시고, 어떤 열이 숫자인지 알 필요가 있습니다. 선험적 설명.

대신 사용해보십시오.

  1. 문자 열로 데이터를 가져옵니다 :

    char_data <- read.csv(input_filename, stringsAsFactors = F) 
    num_data <- data.frame(data.matrix(char_data)) 
    numeric_columns <- sapply(num_data,function(x){mean(as.numeric(is.na(x)))<0.5}) 
    final_data <- data.frame(num_data[,numeric_columns], char_data[,!numeric_columns]) 
    

    코드는 다음을 수행합니다.

  2. 데이터의 인스턴스를 숫자 열로 만듭니다.
  3. 데이터의 열을 숫자로 나타냅니다. 데이터를 숫자로 변환 할 때 50 % 미만의 열을 가진 열은 실제로 숫자입니다.
  4. 숫자 및 문자 열을 최종 데이터 집합으로 병합합니다.

기본적으로 원래 열의 데이터 형식을 문자 및 숫자로 보존하여 .csv 파일 가져 오기를 자동화합니다. dmanuge에서 코드를 기반으로 data.table에 대한

1

버전 :

convNumValues<-function(ds){ 
    ds<-data.table(ds) 
    dsnum<-data.table(data.matrix(ds)) 
    num_cols <- sapply(dsnum,function(x){mean(as.numeric(is.na(x)))<0.5}) 
    nds <- data.table( dsnum[, .SD, .SDcols=attributes(num_cols)$names[which(num_cols)]] 
         ,ds[, .SD, .SDcols=attributes(num_cols)$names[which(!num_cols)]]) 
return(nds) 
}