Який простий спосіб дізнатись, який клас має кожен стовпець у фреймі даних?
Який простий спосіб дізнатись, який клас має кожен стовпець у фреймі даних?
Відповіді:
Одним із варіантів є використання 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
class
повертає вектор символів усіх класів, від яких об'єкт успадковує, результатом sapply(foo, class)
може бути список, а не завжди вектор символів, як очікувало б більшість людей. Що може бути трохи небезпечним ... Я вважаю lapply
набагато безпечнішим.
unlist(lapply(foo, class))
що зручно для фреймів даних з великою кількістю стовпців.
unlist
з lapply
- це жахлива ідея, тому що цілком можливо length(class(x))>1
(див. коментарі вище) - sapply
набагато безпечніше, ніж unlist + lapply
. безпечним способом було б sapply(lapply(foo, class), "[", 1)
- враховуючи, що foo - це кадр даних
Ви можете просто використовувати lapply
або sapply
вбудовані функції.
lapply
поверне вам list
-
lapply(dataframe,class)
while sapply
прийме найкращий з можливих типів повернення, напр. Вектор тощо -
sapply(dataframe,class)
Обидві команди повернуть вам усі назви стовпців із відповідним класом.
Привіт шукав те саме, і це може бути також
unlist(lapply(mtcars,class))
sapply(foo, class)