Qual è un modo semplice per scoprire qual è la classe di ciascuna colonna in un data frame?
Qual è un modo semplice per scoprire qual è la classe di ciascuna colonna in un data frame?
Risposte:
Un'opzione è usare lapply
e class
. Per esempio:
> foo <- data.frame(c("a", "b"), c(1, 2))
> names(foo) <- c("SomeFactor", "SomeNumeric")
> lapply(foo, class)
$SomeFactor
[1] "factor"
$SomeNumeric
[1] "numeric"
Un'altra opzione è str
:
> str(foo)
'data.frame': 2 obs. of 2 variables:
$ SomeFactor : Factor w/ 2 levels "a","b": 1 2
$ SomeNumeric: num 1 2
unlist(lapply(foo, class))
che è utile con frame di dati con molte colonne.
unlist
con lapply
è un'idea terribile perché è possibile che length(class(x))>1
(vedi commenti sopra) - sapply
sia molto più sicuro di unlist + lapply
. un modo sicuro sarebbe sapply(lapply(foo, class), "[", 1)
- dato che foo è un data frame
È possibile utilizzare semplicemente lapply
o sapply
funzioni incorporate.
lapply
ti restituirà un list
-
lapply(dataframe,class)
mentre sapply
accetterà il miglior tipo di ritorno possibile ex. Vector ecc -
sapply(dataframe,class)
Entrambi i comandi ti restituiranno tutti i nomi delle colonne con la rispettiva classe.
Hello stava cercando lo stesso, e potrebbe anche essere
unlist(lapply(mtcars,class))
Volevo un output più compatto rispetto alle ottime risposte sopra usando lapply
, quindi ecco un'alternativa racchiusa come una piccola funzione.
# 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"
class
restituisce un vettore di caratteri di tutte le classi da cui un oggetto eredita, l'output disapply(foo, class)
potrebbe essere un elenco e non sempre un vettore di caratteri come la maggior parte delle persone si aspetterebbe. Che può essere un po 'pericoloso ... Trovolapply
molto più sicuro.