Вопрос

Я пытаюсь указать 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"))                        
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top