Каков простой способ узнать, к какому классу принадлежит каждый столбец во фрейме данных?
Каков простой способ узнать, к какому классу принадлежит каждый столбец во фрейме данных?
Ответы:
Один из вариантов - использовать 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
unlist(lapply(foo, class))
что удобно для фреймов данных с большим количеством столбцов.
unlist
with lapply
- ужасная идея, потому что возможно 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))
Я хотел получить более компактный результат, чем использованные выше отличные ответы 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"
class
возвращает вектор символов всех классов, от которых наследуется объект, выводомsapply(foo, class)
может быть список, а не всегда вектор символов, как ожидает большинство людей. Что может быть немного опасно ... Я считаю,lapply
что намного безопаснее.