2010-05-10 4 views
83

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

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

위의 명령에서 R은 "시간"열을 "문자"로, 나머지는 숫자로 읽으려고합니다. 명령이 완료된 후 "데이터"변수에 올바른 결과가 있었지만 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 

데릭

답변

69

colClasses 벡터는 수입 컬럼의 수와 동일한 길이를 가지고 있어야합니다. 데이터 집합 열의 나머지를 가정하면 5 개의 위치 :

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

아마도 다음을 사용하여 csv의 첫 번째 줄을 읽고 거기에 몇 개의 열이 있는지 결정할 수 있습니다. scan (csv, sep = ',', what = "character", nlines = 1) – defoo

+22

이것은 실제로 잘못된 답변이며 잠시 동안 나를 버렸습니다. 정답은 아래에 있습니다. 얼간이가 되려고하지 않고 다른 사람에게 발생하지 않도록하고 싶었습니다. – Rob

+3

@Rob 필자의 경우, 다른 변수의 클래스를 지정해야 할 때도 여전히 올바른 대답이며'read.table'에 의해 자동으로 인식되지 않습니다. – tchakravarty

11

은 '시간'열이 숫자 만 다음 'read.csv 년대가 숫자가 아닌 문자 및 다른 모든 열이 적어도 하나 개의 관찰을 가지고 가정 기본값은 '시간'을 '요소'로, 나머지 모든 열은 '숫자'로 읽습니다. 따라서 설정 'stringsAsFactors을 = F는'설정하는 것과 같은 결과가됩니다 'colClasses'수동 즉,

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

당신은 하나의 열에 대한 colClasse을 지정할 수 있습니다.

그래서 귀하의 예제에서 당신은 사용해야

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

별로 중요하지 않지만 열 이름을 인용하지 않고도이 작업이 가능하다는 것을 알았습니다. – Hendy

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) 
1

을 헤더가없는 datetime 열과 많은 열은 내 datetime 필드가 36 및 38 열에 있고 문자 필드로 읽으 려한다고 가정합니다.

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