我试图指定在R的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

德里克

有帮助吗?

解决方案

向量必须具有长度colClasses等于进口中的列数。假设在的其他的的数据集列5:

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

其他提示

可以只为一个列指定colClasse。

因此,在你的榜样,你应该使用:

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

假设你的“时间”塔具有至少一个观察一个非数字字符和所有其他列只有数字,那么“read.csv的默认将在阅读‘时间’作为‘因素’和所有列如“数字”的其余部分。因此,设置“stringsAsFactors = F”将具有相同的结果设置“colClasses”手动即,

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

如果您想从头,而不是列号指的名字,你可以使用这样的:

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)

有关无标头,和大量的列的多个datetime列,说我的日期时间字段在列36和38,以及我希望他们读入作为字符字段:

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

我知道OP问起utils::read.csv功能,但让我为这些来这里寻找如何使用readr::read_csv从tidyverse做到这一点提供了一个答案。

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

此应该设置的默认类型对所有列作为字符,而时间将被解析为整数。

如果我们结合了什么@Hendy和@Oddysseus伊萨卡贡献,我们得到了更清洁,更一般的(即适应?)的代码块。

    data <- read.csv("test.csv", head = F, colClasses = c(V36 = "character", V38 = "character"))                        
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top