Каков простой способ узнать, к какому классу принадлежит каждый столбец во фрейме данных?
85
Один из вариантов - использовать 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
withlapply
- ужасная идея, потому что возможноlength(class(x))>1
(см. комментарии выше) -sapply
намного безопаснее, чемunlist + lapply
. безопасный способsapply(lapply(foo, class), "[", 1)
- учитывая, что foo - это фрейм данныхВы можете просто использовать
lapply
илиsapply
встроенные функции.lapply
вернет вамlist
-lapply(dataframe,class)
while
sapply
будет принимать наилучший из возможных возвращаемых типов ex. Вектор и т. Д. -sapply(dataframe,class)
Обе команды вернут вам все имена столбцов с их соответствующим классом.
источник
Привет искал то же самое, а может быть тоже
unlist(lapply(mtcars,class))
источник
Вы также можете использовать
purrr
, что похоже наapply
семейные функции:as.data.frame(purrr::map_chr(mtcars, class)) purrr::map_df(mtcars, class)
источник
Я хотел получить более компактный результат, чем использованные выше отличные ответы
lapply
, поэтому вот альтернатива, оформленная как небольшая функция.# Example data df <- data.frame( w = seq.int(10), x = LETTERS[seq.int(10)], y = factor(letters[seq.int(10)]), z = seq( as.POSIXct('2020-01-01'), as.POSIXct('2020-10-01'), length.out = 10 ) ) # Function returning compact column classes col_classes <- function(df) { t(as.data.frame(lapply(df, function(x) paste(class(x), collapse = ',')))) } # Return example data's column classes col_classes(df)
[,1] w "integer" x "character" y "factor" z "POSIXct,POSIXt"
источник