Определение типов данных столбцов фрейма данных

Я использую R и загружал данные в фреймворк с помощью read.csv(). Как определить тип данных для каждого столбца в кадре данных?

Ответ 1

Лучше всего начать использовать ?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.03 1.599 -0.818 0.872 -2.682
$ x1: int  1 2 3 4 5
$ x2: logi  TRUE TRUE FALSE FALSE FALSE
$ X3: Factor w/ 5 levels "a","b","c","d",..: 1 2 3 4 5

Подход Gavin Simpson также оптимизирован, но предоставляет немного другую информацию, чем class():

sapply(my.data, typeof)
       y        x1        x2        X3 
"double" "integer" "logical" "integer"

Для получения дополнительной информации о class, typeof и среднем дочернем элементе mode см. этот отличный поток SO: Всестороннее исследование типов вещей в R. 'mode' и 'class' и 'typeof' недостаточны.

Ответ 2

sapply(yourdataframe, class)

Где yourdataframe - это имя используемого фрейма данных

Ответ 3

Я бы предложил

sapply(foo, typeof)

если вам нужны фактические типы векторов в кадре данных. class() - это нечто вроде другого зверя.

Если вам не нужно получать эту информацию в виде вектора (т.е. вам не нужно делать что-то еще программно позже), просто используйте str(foo).

В обоих случаях foo будет заменено именем вашего фрейма данных.

Ответ 4

Вот функция, которая является частью пакета 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]).

Надеюсь, что это будет полезно!

Ответ 5

Просто передайте свой фрейм данных в следующую функцию:

data_types <- function(frame) {
  res <- lapply(frame, class)
  res_frame <- data.frame(unlist(res))
  barplot(table(res_frame), main="Data Types", col="steelblue", ylab="Number of Features")
}

чтобы создать график всех типов данных в вашем фрейме данных. Для набора данных iris мы получаем следующее:

введите описание изображения здесь

Ответ 6

Поскольку это не было указано четко, я просто добавляю это:

Я искал способ создать таблицу, которая содержит количество вхождений всех типов данных.

Скажем, у нас есть data.frame с двумя числовыми и одним логическим столбцом

dta <- data.frame(a = c(1,2,3), 
                  b = c(4,5,6), 
                  c = c(TRUE, FALSE, TRUE))

Вы можете суммировать количество столбцов каждого типа данных с помощью

table(unlist(lapply(dta, class)))
# logical numeric 
#       1       2 

Это очень удобно, если у вас много столбцов и вы хотите получить быстрый обзор.

Чтобы дать кредит: это решение было вдохновлено ответом @Cybernetic.