Jaki jest łatwy sposób, aby dowiedzieć się, jaką klasą jest każda kolumna w ramce danych?
Jaki jest łatwy sposób, aby dowiedzieć się, jaką klasą jest każda kolumna w ramce danych?
Odpowiedzi:
Jedną z opcji jest użycie lapply
i class
. Na przykład:
> foo <- data.frame(c("a", "b"), c(1, 2))
> names(foo) <- c("SomeFactor", "SomeNumeric")
> lapply(foo, class)
$SomeFactor
[1] "factor"
$SomeNumeric
[1] "numeric"
Inną opcją jest str
:
> str(foo)
'data.frame': 2 obs. of 2 variables:
$ SomeFactor : Factor w/ 2 levels "a","b": 1 2
$ SomeNumeric: num 1 2
class
zwraca wektor znakowy wszystkich klas, z których dziedziczy obiekt, wynikiem sapply(foo, class)
może być lista, a nie zawsze wektor znakowy, jak by się spodziewała większość ludzi. Co może być trochę niebezpieczne ... Uważam, że lapply
jest o wiele bezpieczniejsze.
unlist(lapply(foo, class))
co jest przydatne w przypadku ramek danych z dużą liczbą kolumn.
unlist
z lapply
to okropny pomysł, ponieważ jest możliwe, że length(class(x))>1
(patrz komentarze powyżej) - sapply
jest o wiele bezpieczniejszy niż unlist + lapply
. bezpiecznym sposobem byłoby sapply(lapply(foo, class), "[", 1)
- biorąc pod uwagę, że foo jest ramką danych
Możesz w prosty sposób korzystać z funkcji lapply
lub sapply
wbudowanych.
lapply
zwróci ci list
-
lapply(dataframe,class)
while sapply
zajmie najlepszy możliwy typ zwrotu, np. Wektor itp -
sapply(dataframe,class)
Oba polecenia zwrócą wszystkie nazwy kolumn wraz z odpowiednią klasą.
Witam szukałem tego samego, a mogłoby też być
unlist(lapply(mtcars,class))
sapply(foo, class)