Указание colClasses в read.csv
Вопрос
Я пытаюсь указать colClasses
варианты в read.csv
функция в Р.В моих данных первый столбец «время» представляет собой в основном вектор символов, а остальные столбцы являются числовыми.
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» будет читаться «время» как «фактор», а все остальные столбцы как «числовые».Поэтому установка «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 без заголовка, и многие столбцы, скажем, мои поля DateTime находятся в столбцах 36 и 38, и я хочу, чтобы они читали в виде полей символов:
data<-read.csv("test.csv", head=FALSE, colClasses=c("V36"="character","V38"="character"))
Я знаю ОП спросил о 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"))