2010-05-10 38 views
83

指定colClasses我試圖指定在河的read.csv功能colClasses選項在我的數據,第一列「時間」基本上是一個字符向量,而列的其餘均爲數字。在read.csv

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的第一行並確定有多少列。 掃描(csv,sep =',',what =「character」,nlines = 1) – defoo 2010-05-10 19:53:09

+22

這實際上是一個不正確的答案,並且讓我停了一會兒。正確答案如下。不要試圖成爲一個混蛋,只是想確保它不會發生在其他任何人身上。 – Rob 2012-11-08 14:33:43

+3

@Rob在我而言,這仍然是正確的答案,當你還需要指定其他變量的類,它們不會自動被'read.table'承認。 – tchakravarty 2014-12-13 18:00:27

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 2014-04-08 00:59:48

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

對於多日期時間列沒有標題和很多列,說我的日期時間字段在列36和38,我希望它們作爲字符字段讀入:

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