Ответ 1
Вектор colClasses должен иметь длину, равную количеству импортированных столбцов. Предположим, что остальные столбцы набора данных: 5:
colClasses=c("character",rep("numeric",5))
Я пытаюсь указать опции 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
Дерек
Вектор colClasses должен иметь длину, равную количеству импортированных столбцов. Предположим, что остальные столбцы набора данных: 5:
colClasses=c("character",rep("numeric",5))
Вы можете указать colClasse только для одного столбца.
Итак, в вашем примере вы должны использовать:
data <- read.csv('test.csv', colClasses=c("time"="character"))
Предполагая, что ваш столбец "время" имеет по крайней мере одно наблюдение с нечисловым символом, а все остальные столбцы имеют только цифры, тогда "read.csv default будет читать" время "как" фактор "и все остальные столбцы -" числовые ". Поэтому установка" stringsAsFactors = F "будет иметь тот же результат, что и установка" colClasses" вручную i.e.,
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 без заголовка и большого количества столбцов, например, мои поля 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 Ithaca, мы получим более чистый и более общий (т.е. адаптируемый?) Кусок кода.
data <- read.csv("test.csv", head = F, colClasses = c(V36 = "character", V38 = "character"))