Menu

Data Frames no R: Criar, Inspecionar e Acessar Colunas

O data frame é a planilha do R: colunas nomeadas de mesmo comprimento, cada uma com seu próprio tipo. Como construir um, dimensioná-lo com str() e head(), e chegar às colunas, linhas e células.

Esta página tem editores executáveis - edite, execute e veja a saída na hora.

Um Data Frame É uma Lista de Colunas

Um data frame é a tabela do R: linhas de observações, colunas de variáveis. É a planilha do R, e o formato em que praticamente todo dado real chega - uma linha por pessoa, por medição, por transação; uma coluna por atributo.

Estruturalmente, um data frame é uma lista de vetores de mesmo comprimento com comportamento de linhas/colunas sobreposto. Esse único fato explica a maior parte de suas regras: cada coluna tem um único tipo (é um vetor), colunas diferentes podem ter tipos diferentes (é uma lista) e toda coluna precisa ter o mesmo comprimento (essa é a parte "frame").

Você constrói um entregando vetores nomeados a data.frame():

Texto, números e lógicos convivendo lado a lado - a mistura que uma matriz não consegue guardar. Na prática, você raramente vai digitar dados à mão assim; tabelas normalmente chegam via read.csv ou de um banco de dados. Mas tudo abaixo se aplica identicamente, não importa de onde o data frame veio.

Dimensionando um Data Frame

Nunca calcule sobre um conjunto de dados que você não olhou. O kit de inspeção do R é curto e vale a pena tornar reflexivo:

  • str() é o que se roda primeiro em qualquer dado recém-carregado: uma linha por coluna com seu tipo e primeiros valores. É onde você pega a coluna de "números" que na verdade foi lida como caractere por causa de uma entrada perdida.
  • nrow() / ncol() dão as dimensões; names() lista os nomes das colunas.
  • summary() dá estatísticas por coluna - mín/mediana/média/máx para números, contagens para lógicos e fatores.
  • head(df) e tail(df) imprimem as seis primeiras e as seis últimas linhas - indispensáveis quando conjuntos de dados reais ficam grandes demais para imprimir por inteiro. Você verá head() em ação abaixo em um conjunto de dados embutido.

Três Formas de Pegar uma Coluna

Acessar colunas é a operação do dia a dia, e o R te dá três grafias:

  • people$age - a forma do dia a dia: curta, legível, com autocompletar na maioria dos editores.
  • people[["age"]] - resultado idêntico, mas o nome pode vir de uma variável (col <- "age"; people[[col]]), o que $ não consegue fazer. Prefira essa dentro de funções.
  • people[, "age"] - estilo matriz: linhas antes da vírgula (vazio = todas), colunas depois.

As três retornam a coluna como um vetor simples, pronto para mean(people$age). A quarta grafia no trecho é a armadilha: people["age"] com colchete simples retorna um data frame de uma coluna, não um vetor - a mesma distinção [ vs [[ que as listas têm, porque um data frame é uma lista. Se uma função matemática reclamar que sua entrada não é numérica, confira seus colchetes.

Linhas e Células

A notação [linha, coluna] alcança qualquer fatia da tabela:

people[2, ] é a segunda linha inteira (como um data frame de uma linha - linhas mantêm seu frame, já que misturam tipos). people[2, "name"] é uma única célula. Um vetor de números de linha extrai várias linhas.

A última linha é a importante: uma condição lógica sobre uma coluna seleciona linhas - aqui, todos acima de 28. Esse padrão de mascarar-as-linhas é a base de toda filtragem de dados no R, e merece seu próprio artigo: veja filtrar e criar subconjuntos para o tratamento completo, incluindo subset() e filtros com várias condições.

Adicionando e Removendo Colunas

Como um data frame é uma lista de colunas, colunas vêm e vão por simples atribuição:

Atribuir a um nome novo adiciona a coluna; o vetor precisa bater com nrow() (ou ter comprimento 1, que é reciclado para preencher todas as linhas). A segunda adição mostra o movimento idiomático: novas colunas calculadas a partir das existentes, usando matemática vetorizada sobre a coluna inteira de uma vez. Atribuir NULL apaga uma coluna por completo.

Valores de coluna podem ser sobrescritos do mesmo jeito - people$age <- people$age + 1 envelhece todo mundo um ano.

Conjuntos de Dados Embutidos, e uma Palavra Sobre Tibbles

O R vem com conjuntos de dados de prática pré-carregados, então você pode testar tudo acima sem importar nada. Os dois que você encontrará em todo tutorial são mtcars (32 carros, 11 variáveis numéricas) e iris (150 flores, 4 medições mais um fator de espécie):

head() provando seu valor: seis linhas te dizem o formato da coisa sem inundar a tela. Esses conjuntos de dados são playgrounds ideais - quando você não tem certeza de como uma função se comporta, teste-a em mtcars antes de apontá-la para seus próprios dados.

Um termo que você vai encontrar assim que tocar no tidyverse: o tibble, a versão do tidyverse para o data frame. Mesmo conceito, comportamento mais educado - a impressão mostra apenas as dez primeiras linhas com os tipos das colunas, e não há correspondência parcial de nomes. Criado com tibble() ou retornado por funções do readr/dplyr:

library(tibble)
tibble(name = c("Rosa", "Ken"), age = c(30, 41))
#> # A tibble: 2 x 2
#>   name    age
#>   <chr> <dbl>
#> 1 Rosa     30
#> 2 Ken      41

Tudo neste artigo - $, str(), adicionar colunas, máscaras lógicas de linhas - funciona em tibbles sem mudanças. Um tibble é um data frame com um polimento extra; aprenda data frames e você aprendeu os dois.

O Que Você Leva Daqui

  • Um data frame é uma lista de colunas de mesmo comprimento: um tipo por coluna, tipos mistos ao longo da tabela - a planilha do R.
  • Inspecione antes de calcular: str() primeiro, depois head(), summary(), nrow()/ncol()/names().
  • df$col, df[["col"]] e df[, "col"] todos retornam uma coluna como vetor; df["col"] com colchete simples retorna um data frame.
  • df[linhas, colunas] fatia qualquer coisa; uma máscara lógica antes da vírgula filtra linhas.
  • Adicione colunas por atribuição (muitas vezes calculadas a partir de outras colunas); remova com NULL; pratique no mtcars.

A seguir: valores ausentes - o que NA significa, por que ele se espalha pelos cálculos e como lidar com isso.

Perguntas frequentes

Como criar um data frame no R?

Passe vetores nomeados e de mesmo comprimento para data.frame(): df <- data.frame(name = c("Rosa", "Ken"), age = c(30, 41)). Cada vetor vira uma coluna. Na prática, a maioria dos data frames não é digitada à mão - eles chegam de read.csv() ou de um banco de dados - mas a estrutura é a mesma.

Como acessar uma coluna em um data frame no R?

De três formas: df$age (rápida e legível), df[["age"]] (mesmo resultado, funciona quando o nome da coluna está em uma variável) e df[, "age"] (estilo matriz). As três retornam a coluna como um vetor simples. df["age"] com colchete simples retorna um data frame de uma coluna - uma fonte frequente de confusão.

O que str() mostra para um data frame?

Uma linha por coluna: seu nome, tipo e os primeiros valores, mais as contagens de linhas e colunas no topo. É o jeito mais rápido de ver se uma coluna foi lida como numérica ou como texto, e é por isso que str() deveria ser a primeira coisa que você roda em qualquer conjunto de dados recém-carregado.

Como adicionar uma coluna a um data frame no R?

Atribua a um nome que ainda não existe: df$score <- c(88, 75, 93). O vetor precisa bater com o número de linhas (ou ter comprimento 1, que é reciclado para todas as linhas). Remova uma coluna atribuindo NULL: df$score <- NULL.

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR