Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在read.csv文件中指定colclass_R_Csv_Read.csv - Fatal编程技术网

在read.csv文件中指定colclass

在read.csv文件中指定colclass,r,csv,read.csv,R,Csv,Read.csv,我试图在R中的read.csv函数中指定colClasses选项。在我的数据中,第一列“time”基本上是一个字符向量,而其余列是数字 data <- read.csv("test.csv", comment.char="" , colClasses=c(time="character", "numeric"), strip.white=FALSE) data 0L]]colClasses向量的长度必须等于导入的列数

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

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

data 0L]]colClasses向量的长度必须等于导入的列数。假设数据集的其余列为5:

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

假设您的“时间”列中至少有一个观察值是非数字字符,而您的所有其他列都只有数字,则“read.csv”的默认值将是将“时间”作为“因子”读入,其余所有列都作为“数字”读入。因此,设置“stringsAsFactors=F”将产生与手动设置“colClasses”相同的结果,即

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

data您只能为一列指定colClasse

因此,在您的示例中,您应该使用:

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

data如果您希望引用标题中的名称而不是列号,可以使用如下内容:

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)

fname对于没有标题的多个datetime列和许多列,假设我的datetime字段位于第36列和第38列,我希望它们作为字符字段读入:

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

data我知道OP询问了关于
utils::read.csv
函数的问题,但是让我为那些来这里搜索如何使用tidyverse上的
readr::read\u csv
来实现这一点的人提供一个答案

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

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

如果我们将@Hendy和@Oddysseus Ithaca的贡献结合起来,我们会得到更干净、更通用(即适应性更强的?)的代码块

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

数据您可能可以使用以下方法读取csv的第一行并确定有多少列。扫描(csv,sep=',,what=“character”,nlines=1)这实际上是一个不正确的答案,让我有一段时间不感兴趣。正确答案如下。不想成为一个混蛋,只是想确保这不会发生在其他任何人身上。@Rob在我的情况下,这仍然是正确的答案,当你还需要指定其他变量的类时,它们不会被
read.table
自动识别。这并不重要,但是我发现这在不引用列名的情况下是有效的。当尝试将引用的整数作为字符读取时,这种方法实际上非常有用。谢谢
    data <- read.csv("test.csv", head = F, colClasses = c(V36 = "character", V38 = "character"))