read.csv에서 colClasses 지정


108

R colClassesread.csv함수에 옵션 을 지정하려고합니다 . 내 데이터에서 첫 번째 열 "시간"은 기본적으로 문자형 벡터이고 나머지 열은 숫자입니다.

data <- read.csv("test.csv", comment.char="" , 
                 colClasses=c(time="character", "numeric"), 
                 strip.white=FALSE)

위의 명령에서 R은 "시간"열을 "문자"로, 나머지는 숫자로 읽길 원합니다. 명령이 완료된 후 "data"변수가 올바른 결과를 얻었지만 R은 다음 경고를 반환했습니다. 이 경고를 어떻게 수정할 수 있는지 궁금합니다.

Warning messages:
 1: In read.table(file = file, header = header, sep = sep, quote = quote,  :
    not all columns named in 'colClasses' exist
 2: In tmp[i[i > 0L]] <- colClasses :
    number of items to replace is not a multiple of replacement length

데릭

답변:


78

colClasses 벡터의 길이는 가져온 열 수와 같아야합니다. 나머지 데이터 세트 열이 5라고 가정합니다 .

colClasses=c("character",rep("numeric",5))

7
다음을 사용하여 csv의 첫 번째 줄을 읽고 얼마나 많은 열이 있는지 확인할 수 있습니다. scan (csv, sep = ',', what = "character", nlines = 1)
defoo

34
이것은 실제로 잘못된 대답이며 잠시 동안 나를 버렸습니다. 정답은 아래와 같습니다. 바보가 되려고하지 않고 다른 사람에게 일어나지 않도록하고 싶었습니다.
Rob

3
@Rob 제 경우에는 다른 변수의 클래스를 지정해야 할 때 여전히 정답이며 read.table.
tchakravarty 2014

173

하나의 열에 만 colClasse를 지정할 수 있습니다.

따라서 귀하의 예에서는 다음을 사용해야합니다.

data <- read.csv('test.csv', colClasses=c("time"="character"))

21
그다지 중요하지는 않지만 열 이름을 인용하지 않고 작동하는 것으로 나타났습니다.
Hendy 2014

이 방법은 인용 된 정수를 문자로 읽으려고 할 때 실제로 매우 유용합니다. 감사!
nils-holmberg

14

'시간'열에 숫자가 아닌 문자가있는 관측치가 하나 이상 있고 다른 모든 열에는 숫자 만 있다고 가정하면 'read.csv'의 기본값은 '시간'에서 '요인'으로 읽히고 나머지는 모두 읽는 것입니다. 열은 '숫자'로 표시됩니다. 따라서 'stringsAsFactors = F'를 설정하면 'colClasses'를 수동으로 설정하는 것과 동일한 결과가 나타납니다.

data <- read.csv('test.csv', stringsAsFactors=F)

10

열 번호가 아닌 헤더에서 이름을 참조하려면 다음과 같이 사용할 수 있습니다.

fname <- "test.csv"
headset <- read.csv(fname, header = TRUE, nrows = 10)
classes <- sapply(headset, class)
classes[names(classes) %in% c("time")] <- "character"
dataset <- read.csv(fname, header = TRUE, colClasses = classes)

4

헤더가없는 여러 datetime 열과 많은 열의 경우 내 datetime 필드가 36 및 38 열에 있고 문자 필드로 읽어야한다고 가정합니다.

data<-read.csv("test.csv", head=FALSE,   colClasses=c("V36"="character","V38"="character"))                        

3

나는 OP가 utils::read.csv기능 에 대해 물었다는 것을 알고 있지만 여기에 와서 readr::read_csvtidyverse에서 사용하는 방법을 검색하는 것에 대한 답변을 제공 하겠습니다.

read_csv ("test.csv", col_names=FALSE, col_types = cols (.default = "c", time = "i"))

이것은 모든 열의 기본 유형을 character 로 설정해야 하며 시간 은 정수로 구문 분석됩니다.


0

@Hendy와 @Oddysseus Ithaca가 기여한 것을 결합하면 더 깨끗하고 더 일반적인 (즉, 적응 가능한?) 코드 덩어리를 얻을 수 있습니다.

    data <- read.csv("test.csv", head = F, colClasses = c(V36 = "character", V38 = "character"))                        
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.