Qual é uma maneira fácil de descobrir em que classe está cada coluna em um quadro de dados?
85
Uma opção é usar lapply
e class
. Por exemplo:
> foo <- data.frame(c("a", "b"), c(1, 2))
> names(foo) <- c("SomeFactor", "SomeNumeric")
> lapply(foo, class)
$SomeFactor
[1] "factor"
$SomeNumeric
[1] "numeric"
Outra opção é str
:
> str(foo)
'data.frame': 2 obs. of 2 variables:
$ SomeFactor : Factor w/ 2 levels "a","b": 1 2
$ SomeNumeric: num 1 2
class
retorna um vetor de caracteres de todas as classes das quais um objeto herda, a saída desapply(foo, class)
pode ser uma lista, e nem sempre um vetor de caracteres como a maioria das pessoas esperaria. O que pode ser um pouco perigoso ... acholapply
muito mais seguro.unlist(lapply(foo, class))
que é útil com frames de dados com muitas colunas.unlist
comlapply
é uma ideia terrível porque é possível quelength(class(x))>1
(veja os comentários acima) -sapply
é muito mais seguro do queunlist + lapply
. uma maneira segura seriasapply(lapply(foo, class), "[", 1)
- dado que foo é um quadro de dadosVocê pode usar funções simples
lapply
ousapply
embutidas.lapply
vai te devolver umlist
-lapply(dataframe,class)
while
sapply
terá o melhor tipo de retorno possível, ex. Vector etc -sapply(dataframe,class)
Ambos os comandos retornarão todos os nomes das colunas com suas respectivas classes.
fonte
Hello estava procurando pelo mesmo, e poderia ser também
unlist(lapply(mtcars,class))
fonte
Você também pode usar
purrr
, que é semelhante àsapply
funções familiares:as.data.frame(purrr::map_chr(mtcars, class)) purrr::map_df(mtcars, class)
fonte
Eu queria uma saída mais compacta do que as ótimas respostas acima usando
lapply
, então aqui está uma alternativa embrulhada como uma pequena função.# Example data df <- data.frame( w = seq.int(10), x = LETTERS[seq.int(10)], y = factor(letters[seq.int(10)]), z = seq( as.POSIXct('2020-01-01'), as.POSIXct('2020-10-01'), length.out = 10 ) ) # Function returning compact column classes col_classes <- function(df) { t(as.data.frame(lapply(df, function(x) paste(class(x), collapse = ',')))) } # Return example data's column classes col_classes(df)
[,1] w "integer" x "character" y "factor" z "POSIXct,POSIXt"
fonte