J'utilise R et ai chargé des données dans une trame de données en utilisant read.csv()
. Comment déterminer le type de données de chaque colonne du bloc de données?
Votre meilleur choix est d’utiliser ?str()
. Pour explorer quelques exemples, créons des données:
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 La solution de Henao H est très simple:
sapply(my.data, class)
y x1 x2 X3
"numeric" "integer" "logical" "factor"
En utilisant str()
, vous obtiendrez cette information plus des avantages supplémentaires (tels que le niveau de vos facteurs et les premières valeurs de chaque variable):
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
L'approche de @Gavin Simpson est également simplifiée, mais fournit des informations légèrement différentes de celles de class()
:
sapply(my.data, typeof)
y x1 x2 X3
"double" "integer" "logical" "integer"
Pour plus d’informations sur class
, typeof
et l’enfant du milieu, mode
, consultez cet excellent fil de discussion SO: Un aperçu complet des types d’objets en mode R. insuffisant .
sapply(yourdataframe, class)
Où yourdataframe est le nom du bloc de données que vous utilisez
Je voudrais suggerer
sapply(foo, typeof)
si vous avez besoin des types réels de vecteurs dans la trame de données. class()
est un peu une bête différente.
Si vous n'avez pas besoin d'obtenir cette information en tant que vecteur (c'est-à-dire que vous n'en avez pas besoin pour faire autre chose par programme plus tard), utilisez simplement str(foo)
.
Dans les deux cas, foo
serait remplacé par le nom de votre trame de données.
Passez simplement votre trame de données dans la fonction suivante:
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")
}
pour produire un tracé de tous les types de données dans votre cadre de données. Pour le jeu de données iris, nous obtenons ce qui suit:
data_types(iris)
Comme cela n’a pas été dit clairement, j’ajoute simplement ceci:
Je cherchais un moyen de créer une table contenant le nombre d'occurrences de tous les types de données.
Disons que nous avons un data.frame
avec deux colonnes numériques et une colonne logique
dta <- data.frame(a = c(1,2,3),
b = c(4,5,6),
c = c(TRUE, FALSE, TRUE))
Vous pouvez résumer le nombre de colonnes de chaque type de données avec
table(unlist(lapply(dta, class)))
# logical numeric
# 1 2
Cela est extrêmement pratique si vous avez beaucoup de colonnes et que vous souhaitez obtenir un aperçu rapide.
Pour donner crédit: Cette solution a été inspirée par la réponse de @Cybernetic .
Voici une fonction qui fait partie du paquet helpRFunctions qui renverra une liste de tous les types de données de votre cadre de données, ainsi que les noms de variables spécifiques associés à ce type.
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
Vous pouvez ensuite faire quelque chose comme var(my.data[t$numeric])
.
J'espère que c'est utile!
Pour les petites trames de données:
library(tidyverse)
as_tibble(mtcars)
vous donne une impression du df avec les types de données
# 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>
1 21 6 160 110 3.9 2.62 16.5 0 1 4 4
2 21 6 160 110 3.9 2.88 17.0 0 1 4 4
3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
Pour les grandes trames de données:
glimpse(mtcars)
vous donne une vue structurée des types de données:
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, ...
Pour obtenir une liste du type de données des colonnes (comme indiqué par @Alexandre ci-dessus):
map(mtcars, class)
donne une liste de types de données:
$mpg
[1] "numeric"
$cyl
[1] "numeric"
$disp
[1] "numeric"
$hp
[1] "numeric"
Pour changer le type de données d'une colonne:
library(hablar)
mtcars %>%
convert(chr(mpg, am),
int(carb))
convertit les colonnes mpg
et am
en caractères et la colonne carb
en nombres entiers:
# 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>
1 21 6 160 110 3.9 2.62 16.5 0 1 4 4
2 21 6 160 110 3.9 2.88 17.0 0 1 4 4
3 22.8 4 108 93 3.85 2.32 18.6 1 1 4 1
4 21.4 6 258 110 3.08 3.22 19.4 1 0 3 1
Une autre option consiste à utiliser la fonction map du paquet purrr.
library(purrr)
map(df,class)
Si vous importez le fichier csv en tant que data.frame (et non en tant que matrice), vous pouvez également utiliser summary.default
summary.default(mtcars)
Length Class Mode
mpg 32 -none- numeric
cyl 32 -none- numeric
disp 32 -none- numeric
hp 32 -none- numeric
drat 32 -none- numeric
wt 32 -none- numeric
qsec 32 -none- numeric
vs 32 -none- numeric
am 32 -none- numeric
gear 32 -none- numeric
carb 32 -none- numeric