Указание colClasses в read.csv

Я пытаюсь указать опции colClasses в функции read.csv в R. В моих данных первый столбец "время" в основном представляет собой вектор символов, а остальные столбцы - числовые.

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

В приведенной выше команде я хотел бы, чтобы R читал в столбце "время" как "символ", а остальное - как числовое. Хотя переменная "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

Дерек

Ответ 1

Вектор colClasses должен иметь длину, равную количеству импортированных столбцов. Предположим, что остальные столбцы набора данных: 5:

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

Ответ 2

Вы можете указать colClasse только для одного столбца.

Итак, в вашем примере вы должны использовать:

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

Ответ 3

Предполагая, что ваш столбец "время" имеет по крайней мере одно наблюдение с нечисловым символом, а все остальные столбцы имеют только цифры, тогда "read.csv default будет читать" время "как" фактор "и ​​все остальные столбцы -" числовые ". Поэтому установка" stringsAsFactors = F "будет иметь тот же результат, что и установка" colClasses" вручную i.e.,

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

Ответ 4

Если вы хотите ссылаться на имена из заголовка, а не на номера столбцов, вы можете использовать что-то вроде этого:

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)

Ответ 5

Для нескольких столбцов datetime без заголовка и большого количества столбцов, например, мои поля datetime находятся в столбцах 36 и 38, и я хочу, чтобы они читались как поля символов:

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

Ответ 6

Я знаю, что OP спросил о функции utils::read.csv, но позвольте мне дать ответ на них, которые приходят сюда в поисках того, как это сделать, используя readr::read_csv из tidyverse.

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

Это должно установить тип по умолчанию для всех столбцов как символ, в то время как время будет проанализировано как целое число.

Ответ 7

Если мы объединим то, что сделали @Hendy и @Oddysseus Ithaca, мы получим более чистый и более общий (т.е. адаптируемый?) Кусок кода.

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