Jak uzyskać klasy wszystkich kolumn w ramce danych?


85

Jaki jest łatwy sposób, aby dowiedzieć się, jaką klasą jest każda kolumna w ramce danych?

Odpowiedzi:


91

Jedną z opcji jest użycie lapplyi 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

20
Równieżsapply(foo, class)
MYaseen208

9
Ponieważ classzwraca 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 lapplyjest o wiele bezpieczniejsze.
flodela

1
dla lepszej czytelności proponuję: unlist(lapply(foo, class))co jest przydatne w przypadku ramek danych z dużą liczbą kolumn.
p130,

1
unlistz lapplyto okropny pomysł, ponieważ jest możliwe, że length(class(x))>1 (patrz komentarze powyżej) - sapplyjest o wiele bezpieczniejszy niż unlist + lapply. bezpiecznym sposobem byłoby sapply(lapply(foo, class), "[", 1)- biorąc pod uwagę, że foo jest ramką danych
lebatsnok

27

Możesz w prosty sposób korzystać z funkcji lapplylub sapplywbudowanych.

lapplyzwróci ci list-

lapply(dataframe,class)

while sapplyzajmie najlepszy możliwy typ zwrotu, np. Wektor itp -

sapply(dataframe,class)

Oba polecenia zwrócą wszystkie nazwy kolumn wraz z odpowiednią klasą.



0

Możesz również użyć purrr, co jest podobne do applyfunkcji rodzinnych:

as.data.frame(purrr::map_chr(mtcars, class))
purrr::map_df(mtcars, class)
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.