Jaki jest łatwy sposób, aby dowiedzieć się, jaką klasą jest każda kolumna w ramce danych?
85
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
sapply(foo, class)
class
zwraca wektor znakowy wszystkich klas, z których dziedziczy obiekt, wynikiemsapply(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, żelapply
jest o wiele bezpieczniejsze.unlist(lapply(foo, class))
co jest przydatne w przypadku ramek danych z dużą liczbą kolumn.unlist
zlapply
to okropny pomysł, ponieważ jest możliwe, żelength(class(x))>1
(patrz komentarze powyżej) -sapply
jest o wiele bezpieczniejszy niżunlist + lapply
. bezpiecznym sposobem byłobysapply(lapply(foo, class), "[", 1)
- biorąc pod uwagę, że foo jest ramką danychMożesz w prosty sposób korzystać z funkcji
lapply
lubsapply
wbudowanych.lapply
zwróci cilist
-while
sapply
zajmie najlepszy możliwy typ zwrotu, np. Wektor itp -Oba polecenia zwrócą wszystkie nazwy kolumn wraz z odpowiednią klasą.
źródło
Witam szukałem tego samego, a mogłoby też być
źródło
Możesz również użyć
purrr
, co jest podobne doapply
funkcji rodzinnych:źródło