Especificando collasses no Read.csv
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
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"))