Pergunta

Estou tentando especificar o colClasses opções no read.csv Função em R. Nos meus dados, a primeira coluna "tempo" é basicamente um vetor de caractere, enquanto o restante das colunas é numérico.

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

No comando acima, eu gostaria que R lesse na coluna "Time" como "personagem" e o restante como numérico. Embora a variável "dados" tenha o resultado correto após o comando concluído, R retornou os seguintes avisos. Gostaria de saber como eu poderia consertar esses avisos?

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

Derek

Foi útil?

Solução

O vetor do Colclasses deve ter comprimento igual ao número de colunas importadas. Supondo o descanso Das suas colunas de conjunto de dados são 5:

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

Outras dicas

Você pode especificar o Colcllasse para apenas uma coluna.

Então, no seu exemplo, você deve usar:

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

Supondo que sua coluna 'tempo' tenha pelo menos uma observação com um caráter não numérico e todas as suas outras colunas têm apenas números, então 'Read.CSV o padrão será ler em' tempo 'como um' fator 'e todo o resto do as colunas como 'numéricas'. Portanto, definir 'stringsafactors = f' terá o mesmo resultado que definir as 'collasses' manualmente, ou seja,

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

Se você deseja se referir a nomes do cabeçalho em vez de números de colunas, você pode usar algo assim:

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)

Para várias colunas DateTime, sem cabeçalho e muitas colunas, dizem que meus campos de tempo de dados estão nas colunas 36 e 38, e eu quero que elas sejam lidas como campos de personagens:

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

Eu sei o OP perguntado sobre o utils::read.csv função, mas deixe -me fornecer uma resposta para eles que vêm aqui pesquisando como fazer isso usando readr::read_csv do Tidyverse.

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

Isso deve definir o tipo padrão para todas as colunas como personagem, enquanto Tempo seria analisado como inteiro.

Se combinarmos o que contribuíram @hendy e @oddysseus Ithaca, ficamos mais limpos e um pedaço de código mais limpo e mais geral (ou seja, adaptável?)

    data <- read.csv("test.csv", head = F, colClasses = c(V36 = "character", V38 = "character"))                        
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top