Programaticamente (por exemplo, sapply(..., class))ou de forma interativa (por exemplo str(...)) ou ambos? Em geral, é mais escalável para fazê-lo por meio de programação, então você pode arbitrariamente Filter(...)a lista de números inteiros, caracteres, fatores etc. Ou você pode usar grep/greplpara inferir coluna tipos de names(...)se seguir as convenções de nomenclatura
SMCI
@smci: Eu não pedi 'programaticamente' na minha pergunta original. Não sei por que você mudaria toda a natureza da minha pergunta.
stackoverflowuser2010
ok, foi revertido. Não mudou a natureza inteira, esclareceu em uma das duas direções. As abordagens interativas str(...)não são escaláveis e ficam sem vapor em <100 cols.
SMCI
Respostas:
215
Sua melhor aposta para começar é usar ?str(). Para explorar alguns exemplos, vamos criar alguns dados:
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])
A solução de @Wilmer E Henao H é muito simplificada:
sapply(my.data, class)
y x1 x2 X3
"numeric""integer""logical""factor"
Usando str()você obtém essas informações e vantagens extras (como os níveis de seus fatores e os primeiros valores de cada variável):
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
A abordagem de @Gavin Simpson também é simplificada, mas fornece informações ligeiramente diferentes de class():
sapply(my.data, typeof)
y x1 x2 X3
"double""integer""logical""integer"
Depois de usar o R por vários meses, descobri que str(dataframe)é a maneira mais rápida de determinar os tipos de coluna rapidamente. As outras abordagens exigem mais pressionamentos de tecla e não mostram tanta informação, mas são úteis se os tipos de dados da coluna forem uma entrada para outras funções.
stackoverflowuser2010
Oi quando eu fiz o mesmo com aplicar em vez de aplicar, não funcionou
Dom Jo
@ DomJo, por que você usaria apply()? Isso é para matrizes. Um quadro de dados é uma lista (tipo especial de).
gung - Restabelece Monica
50
sapply(yourdataframe, class)
Onde yourdataframe é o nome do quadro de dados que você está usando
se você precisar dos tipos reais dos vetores no quadro de dados. class()é uma espécie de animal diferente.
Se você não precisar obter essas informações como um vetor (ou seja, não precisará fazer outra coisa programaticamente mais tarde), basta usar str(foo).
Nos dois casos, fooseria substituído pelo nome do seu quadro de dados.
# 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
Para quadros de dados grandes:
glimpse(mtcars)
fornece uma visão estruturada dos tipos de dados:
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,...
Para obter uma lista do tipo de dados das colunas (conforme mencionado por @Alexandre acima):
converte colunas mpge amem caracteres e a coluna carbem número inteiro:
# 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
Aqui está uma função que faz parte do pacote helpRFunctions que retornará uma lista de todos os vários tipos de dados em seu quadro de dados, bem como os nomes de variáveis específicos associados a esse tipo.
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
Você poderia fazer algo assim var(my.data[t$numeric]).
sapply(..., class))
ou de forma interativa (por exemplostr(...)
) ou ambos? Em geral, é mais escalável para fazê-lo por meio de programação, então você pode arbitrariamenteFilter(...)
a lista de números inteiros, caracteres, fatores etc. Ou você pode usargrep/grepl
para inferir coluna tipos denames(...)
se seguir as convenções de nomenclaturastr(...)
não são escaláveis e ficam sem vapor em <100 cols.Respostas:
Sua melhor aposta para começar é usar
?str()
. Para explorar alguns exemplos, vamos criar alguns dados:A solução de @Wilmer E Henao H é muito simplificada:
Usando
str()
você obtém essas informações e vantagens extras (como os níveis de seus fatores e os primeiros valores de cada variável):A abordagem de @Gavin Simpson também é simplificada, mas fornece informações ligeiramente diferentes de
class()
:Para obter mais informações sobre
class
,typeof
e o filho do meiomode
, consulte este excelente thread SO: Uma pesquisa abrangente dos tipos de coisas em R. 'mode' e 'class' e 'typeof' são insuficientes .fonte
str(dataframe)
é a maneira mais rápida de determinar os tipos de coluna rapidamente. As outras abordagens exigem mais pressionamentos de tecla e não mostram tanta informação, mas são úteis se os tipos de dados da coluna forem uma entrada para outras funções.apply()
? Isso é para matrizes. Um quadro de dados é uma lista (tipo especial de).Onde yourdataframe é o nome do quadro de dados que você está usando
fonte
eu sugeriria
se você precisar dos tipos reais dos vetores no quadro de dados.
class()
é uma espécie de animal diferente.Se você não precisar obter essas informações como um vetor (ou seja, não precisará fazer outra coisa programaticamente mais tarde), basta usar
str(foo)
.Nos dois casos,
foo
seria substituído pelo nome do seu quadro de dados.fonte
Basta passar seu quadro de dados para a seguinte função:
para produzir uma plotagem de todos os tipos de dados no seu quadro de dados. Para o conjunto de dados da íris , obtemos o seguinte:
fonte
Para pequenos quadros de dados:
fornece uma impressão do df com tipos de dados
Para quadros de dados grandes:
fornece uma visão estruturada dos tipos de dados:
Para obter uma lista do tipo de dados das colunas (conforme mencionado por @Alexandre acima):
fornece uma lista de tipos de dados:
Para alterar o tipo de dados de uma coluna:
converte colunas
mpg
eam
em caracteres e a colunacarb
em número inteiro:fonte
Como não foi declarado claramente, apenas adiciono o seguinte:
Eu estava procurando uma maneira de criar uma tabela que contém o número de ocorrências de todos os tipos de dados .
Digamos que temos um
data.frame
com duas colunas numéricas e uma lógicaVocê pode resumir o número de colunas de cada tipo de dados com esse
Isso é extremamente útil, se você tiver muitas colunas e quiser obter uma visão geral rápida.
Para dar crédito: Esta solução foi inspirada na resposta da @Cybernetic .
fonte
Aqui está uma função que faz parte do pacote helpRFunctions que retornará uma lista de todos os vários tipos de dados em seu quadro de dados, bem como os nomes de variáveis específicos associados a esse tipo.
Você poderia fazer algo assim
var(my.data[t$numeric])
.Espero que isso seja útil!
fonte
lapply(your_data, class)
um pouco de processamento extra para formatação.Se você importar o arquivo csv como data.frame (e não como matriz), também poderá usar
summary.default
fonte
Outra opção é usar a função map do pacote purrr.
fonte