Як отримати класи всіх стовпців у фреймі даних?


85

Який простий спосіб дізнатись, який клас має кожен стовпець у фреймі даних?

Відповіді:


91

Одним із варіантів є використання lapplyта class. Наприклад:

> foo <- data.frame(c("a", "b"), c(1, 2))
> names(foo) <- c("SomeFactor", "SomeNumeric")
> lapply(foo, class)
$SomeFactor
[1] "factor"

$SomeNumeric
[1] "numeric"

Інший варіант str:

> str(foo)
'data.frame':   2 obs. of  2 variables:
 $ SomeFactor : Factor w/ 2 levels "a","b": 1 2
 $ SomeNumeric: num  1 2

20
Такожsapply(foo, class)
MYaseen208

9
Оскільки classповертає вектор символів усіх класів, від яких об'єкт успадковує, результатом sapply(foo, class)може бути список, а не завжди вектор символів, як очікувало б більшість людей. Що може бути трохи небезпечним ... Я вважаю lapplyнабагато безпечнішим.
флодель

1
для кращої читабельності я пропоную: unlist(lapply(foo, class))що зручно для фреймів даних з великою кількістю стовпців.
p130ter

1
unlistз lapply- це жахлива ідея, тому що цілком можливо length(class(x))>1 (див. коментарі вище) - sapplyнабагато безпечніше, ніж unlist + lapply. безпечним способом було б sapply(lapply(foo, class), "[", 1)- враховуючи, що foo - це кадр даних
lebatsnok

27

Ви можете просто використовувати lapplyабо sapplyвбудовані функції.

lapplyповерне вам list-

lapply(dataframe,class)

while sapplyприйме найкращий з можливих типів повернення, напр. Вектор тощо -

sapply(dataframe,class)

Обидві команди повернуть вам усі назви стовпців із відповідним класом.



0

Ви можете використовувати purrrтакож, що схоже на applyсімейні функції:

as.data.frame(purrr::map_chr(mtcars, class))
purrr::map_df(mtcars, class)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.