在read.csv中指定colClasses

时间:2010-05-10 18:30:04

标签: r csv read.csv

我正在尝试在R中的colClasses函数中指定read.csv选项。在我的数据中,第一列“time”基本上是字符向量,而其余列是数字。

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

在上面的命令中,我希望R在“time”列中读取“character”,其余为数字。虽然命令完成后“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

德里克

6 个答案:

答案 0 :(得分:147)

您只能为一列指定colClasse。

所以在你的例子中你应该使用:

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

答案 1 :(得分:75)

colClasses向量的长度必须等于导入列的数量。假设数据集列的 rest 为5:

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

答案 2 :(得分:13)

假设您的'时间'列至少有一个带有非数字字符的观察,而您的所有其他列只有数字,那么'read.csv的默认值将是'时间'作为'因子'读取所有列的其余部分为“数字”。因此,设置'stringsAsFactors = F'将与手动设置'colClasses'具有相同的结果,即

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

答案 3 :(得分: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 :(得分:3)

对于没有标题和大量列的多个日期时间列,请说我的日期时间字段位于第36和38列,我希望它们作为字符字段读入:

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

答案 5 :(得分:0)

如果我们将@Hendy和@Oddysseus Ithaca的贡献结合在一起,我们将获得更整洁的代码以及更通用(即适应性更强)的代码块。

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