#r
#r
Вопрос:
Я пытаюсь вывести фрейм данных, который определяет типы переменных для данного фрейма данных. Однако я получаю разные результаты в зависимости от фрейма данных. Например:
lapply(airquality, class) %>% data.frame
выдает пригодный для использования фрейм данных с одной строкой, но:
lapply(diamonds, class) %>% data.frame
выдает двухстрочный фрейм данных, в котором требуемая информация находится только во второй строке.
Как я могу получить согласованные результаты между двумя фреймами данных? Я доволен выводом для airquality
, но мне бы хотелось только вторую строку diamonds
. Я использую только эти два фрейма данных для этого примера, но я хотел бы, чтобы решение было устойчивым и к другим фреймам данных.
Ответ №1:
Столбец может иметь несколько классов. Вы можете свернуть их в одну строку.
lapply(airquality, function(x) toString(class(x))) %>% data.frame
# Ozone Solar.R Wind Temp Month Day
#1 integer integer numeric integer integer integer
lapply(diamonds, function(x) toString(class(x))) %>% data.frame
# carat cut color clarity depth table
#1 numeric ordered, factor ordered, factor ordered, factor numeric numeric
# price x y z
#1 integer numeric numeric numeric
Комментарии:
1. Спасибо Ronak — один вопрос, однако, при применении вашего решения к алмазам слово
ordered
по-прежнему появляется рядом с факторами. есть ли в любом случае, чтобы отображался только «фактор»?2. Это потому, что это упорядоченные факторы, и именно так отображается их класс. Если вы хотите, чтобы они были единственными факторами, вы можете сделать что-то вроде этого
sapply(diamonds, function(x) if(is.factor(x)) "factor" else toString(class(x)))
Ответ №2:
Вы можете sapply
по столбцам с type_sum
:
sapply(airquality, pillar::type_sum)
# Ozone Solar.R Wind Temp Month Day
# "int" "int" "dbl" "int" "int" "int"
sapply(diamonds, pillar::type_sum)
# carat cut color clarity depth table price x y z
# "dbl" "ord" "ord" "ord" "dbl" "dbl" "int" "dbl" "dbl" "dbl"
Обновить
Согласно комментариям OP о желании видеть «фактор», а не «упорядоченный», вы можете выбрать последний элемент класса для каждого типа данных. Для столбцов типа «упорядоченный, фактор» это приведет к извлечению только «фактора»:
sapply(diamonds, function(x) class(x)[[length(class(x))]])
# carat cut color clarity depth table price x y z
# "numeric" "factor" "factor" "factor" "numeric" "numeric" "integer" "numeric" "numeric" "numeric"