Программно (например, sapply(..., class))или интерактивно (например str(...))) или и то и другое? Как правило, это более масштабируемо, чтобы сделать это программно, тогда вы можете произвольно составить Filter(...)список для целых чисел, символов, факторов и т. Д. Или вы можете использовать, grep/greplчтобы вывести типы столбцов, names(...)если они следуют каким-либо соглашениям об именах
SMCI
@smci: я не спрашивал «программно» в своем первоначальном вопросе. Я не знаю, почему вы изменили бы всю природу моего вопроса.
stackoverflowuser2010
хорошо, откатился Это не изменило всю природу, это прояснило это в одном из двух направлений. Использование интерактивных подходов str(...)не масштабируемо и заканчивается на <100 столбцов.
августа
Ответы:
215
Лучше всего начать с использования ?str(). Чтобы изучить некоторые примеры, давайте сделаем некоторые данные:
set.seed(3221)# this makes the example exactly reproducible
my.data <- data.frame(y=rnorm(5),
x1=c(1:5),
x2=c(TRUE,TRUE,FALSE,FALSE,FALSE),
X3=letters[1:5])
Решение @Wilmer E Henao H очень упрощено:
sapply(my.data, class)
y x1 x2 X3
"numeric""integer""logical""factor"
Использование str()дает вам эту информацию плюс дополнительные плюсы (такие как уровни ваших факторов и первые несколько значений каждой переменной):
str(my.data)'data.frame':5 obs. of 4 variables:$ y : num 1.031.599-0.8180.872-2.682$ x1: int 12345$ x2: logi TRUETRUEFALSEFALSEFALSE$ X3: Factor w/5 levels "a","b","c","d",..:12345
Подход @Gavin Simpson также оптимизирован, но предоставляет немного иную информацию, чем class():
sapply(my.data, typeof)
y x1 x2 X3
"double""integer""logical""integer"
После использования R в течение нескольких месяцев я обнаружил, что str(dataframe)это самый быстрый способ быстро определить типы столбцов. Другие подходы требуют большего количества нажатий клавиш и не показывают столько информации, но они полезны, если типы данных столбца являются входными данными для других функций.
stackoverflowuser2010
Привет, когда я сделал то же самое с apply вместо apply, это не сработало
Dom Jo
@ DomJo, зачем ты используешь apply()? Это для матриц. Фрейм данных - это (особый вид) список.
gung - Восстановить Монику
50
sapply(yourdataframe, class)
Где yourdataframe - это имя фрейма данных, который вы используете
# A tibble: 32 x 11
mpg cyl disp hp drat wt qsec vs am gear carb
*<dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl><dbl>12161601103.92.6216.5014422161601103.92.8817.00144322.84108933.852.3218.61141
Для больших фреймов данных:
glimpse(mtcars)
дает вам структурированное представление типов данных:
Observations:32
Variables:11$ mpg <dbl>21.0,21.0,22.8,21.4,18.7,18.1,14.3,24.4,22.8,19.2,17.8,16.4,17....$ cyl <dbl>6,6,4,6,8,6,8,4,4,6,6,8,8,8,8,8,8,4,4,4,4,8,8,8,8,...$ disp <dbl>160.0,160.0,108.0,258.0,360.0,225.0,360.0,146.7,140.8,167.6,167.6...$ hp <dbl>110,110,93,110,175,105,245,62,95,123,123,180,180,180,205,215...$ drat <dbl>3.90,3.90,3.85,3.08,3.15,2.76,3.21,3.69,3.92,3.92,3.92,3.07,3.0...$ wt <dbl>2.620,2.875,2.320,3.215,3.440,3.460,3.570,3.190,3.150,3.440,3.440...$ qsec <dbl>16.46,17.02,18.61,19.44,17.02,20.22,15.84,20.00,22.90,18.30,18.90...$ vs <dbl>0,0,1,1,0,1,0,1,1,1,1,0,0,0,0,0,0,1,1,1,1,0,0,0,0,...$ am <dbl>1,1,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,0,0,0,0,0,...$ gear <dbl>4,4,4,3,3,3,3,4,4,4,4,3,3,3,3,3,3,4,4,4,3,3,3,3,3,...$ carb <dbl>4,4,1,1,2,1,4,2,2,4,4,3,3,3,4,4,4,1,2,1,1,2,2,4,2,...
Чтобы получить список типов данных столбцов (как сказано выше @Alexandre):
преобразует столбцы mpgи amв символ и столбец carbв целое число:
# A tibble: 32 x 11
mpg cyl disp hp drat wt qsec vs am gear carb
<chr><dbl><dbl><dbl><dbl><dbl><dbl><dbl><chr><dbl><int>12161601103.92.6216.5014422161601103.92.8817.00144322.84108933.852.3218.61141421.462581103.083.2219.41031
Вот функция, которая является частью пакета helpRFunctions , которая будет возвращать список всех различных типов данных в вашем фрейме данных, а также имена конкретных переменных, связанных с этим типом.
install.package('devtools')# Only needed if you dont have this installed.
library(devtools)
install_github('adam-m-mcelhinney/helpRFunctions')
library(helpRFunctions)
my.data <- data.frame(y=rnorm(5),
x1=c(1:5),
x2=c(TRUE,TRUE,FALSE,FALSE,FALSE),
X3=letters[1:5])
t <- list.df.var.types(my.data)
t$factor
t$integer
t$logical
t$numeric
Вы могли бы тогда сделать что-то вроде var(my.data[t$numeric]).
sapply(..., class))
или интерактивно (напримерstr(...)
)) или и то и другое? Как правило, это более масштабируемо, чтобы сделать это программно, тогда вы можете произвольно составитьFilter(...)
список для целых чисел, символов, факторов и т. Д. Или вы можете использовать,grep/grepl
чтобы вывести типы столбцов,names(...)
если они следуют каким-либо соглашениям об именахstr(...)
не масштабируемо и заканчивается на <100 столбцов.Ответы:
Лучше всего начать с использования
?str()
. Чтобы изучить некоторые примеры, давайте сделаем некоторые данные:Решение @Wilmer E Henao H очень упрощено:
Использование
str()
дает вам эту информацию плюс дополнительные плюсы (такие как уровни ваших факторов и первые несколько значений каждой переменной):Подход @Gavin Simpson также оптимизирован, но предоставляет немного иную информацию, чем
class()
:Для получения дополнительной информации о
class
,typeof
и о среднем ребенке,mode
посмотрите эту превосходную ветку SO: всестороннего обзора типов вещей в R. 'mode' и 'class' и 'typeof' недостаточно .источник
str(dataframe)
это самый быстрый способ быстро определить типы столбцов. Другие подходы требуют большего количества нажатий клавиш и не показывают столько информации, но они полезны, если типы данных столбца являются входными данными для других функций.apply()
? Это для матриц. Фрейм данных - это (особый вид) список.Где yourdataframe - это имя фрейма данных, который вы используете
источник
Я бы предложил
если вам нужны фактические типы векторов во фрейме данных.
class()
это немного другой зверь.Если вам не нужно получать эту информацию в виде вектора (то есть вам не нужно делать что-то еще программно позже), просто используйте
str(foo)
.В обоих случаях
foo
будет заменено имя вашего фрейма данных.источник
Просто передайте ваш фрейм данных в следующую функцию:
создать график всех типов данных в вашем фрейме данных. Для набора данных радужной оболочки мы получаем следующее:
источник
Для небольших кадров данных:
дает вам распечатку из df с типами данных
Для больших фреймов данных:
дает вам структурированное представление типов данных:
Чтобы получить список типов данных столбцов (как сказано выше @Alexandre):
дает список типов данных:
Чтобы изменить тип данных столбца:
преобразует столбцы
mpg
иam
в символ и столбецcarb
в целое число:источник
Поскольку это не было четко указано, я просто добавляю это:
Я искал способ создать таблицу, которая содержит количество вхождений всех типов данных .
Скажем, у нас есть
data.frame
два числовых и один логический столбецВы можете суммировать количество столбцов каждого типа данных с этим
Это очень удобно, если у вас много столбцов и вы хотите получить краткий обзор.
Чтобы отдать должное: это решение было вдохновлено ответом @Cybernetic .
источник
Вот функция, которая является частью пакета helpRFunctions , которая будет возвращать список всех различных типов данных в вашем фрейме данных, а также имена конкретных переменных, связанных с этим типом.
Вы могли бы тогда сделать что-то вроде
var(my.data[t$numeric])
.Надеюсь, это полезно!
источник
lapply(your_data, class)
с небольшой дополнительной обработкой для форматирования.Если вы импортируете CSV-файл как data.frame (а не матрицу), вы также можете использовать
summary.default
источник
Другой вариант - использовать функцию map пакета purrr.
источник