Como se acessa uma coluna de um data frame em R?

Passo 1

O que a pergunta pede: mostrar de forma clara e prática como acessar uma coluna de um data frame em R.
Informações relevantes (pressupostos típicos): há um data frame qualquer chamado, por exemplo, df, que tem colunas nomeadas (por exemplo x, y, idade, "nome completo" etc.). Quer-se obter o conteúdo de uma coluna — às vezes como um vetor simples, às vezes mantendo-a como um data frame com uma única coluna — e às vezes selecioná‑la por nome de string em tempo de execução (programaticamente). Vou explicar as formas mais usadas, quando cada uma é adequada e mostrar exemplos simples que você consegue reproduzir na prova.

Passo 2

Método 1 — usando o operador dólar \$ (o mais comum para leitura direta)
  • Sintaxe: df$coluna
  • O que retorna: geralmente um vetor (por exemplo numeric, character, factor, etc.) com os valores da coluna coluna.
  • Quando usar: quando você conhece o nome da coluna e ele é um nome sintático (sem espaços, começa com letra, sem caracteres estranhos), e quer um vetor direto.
  • Exemplo prático:
    • Código:
      df <- data.frame(x = 1:3, y = c(“a”,“b”,“c”))
      df$x
    • Resultado esperado: 1 2 3 (um vetor numérico).
  • Observação: df$coluna não aceita um nome de coluna armazenado numa variável (programaticamente) — nesse caso, use os métodos seguintes.

Passo 3

Método 2 — usando colchetes duplos [[ ]] (acesso por nome ou por índice; ótimo para uso programático)
  • Sintaxe: df[["coluna"]] ou df[[i]] onde i é um índice inteiro.
  • O que retorna: um vetor (igual ao df$coluna) — retorna o conteúdo da coluna sem manter a estrutura de data.frame.
  • Quando usar: quando quer acessar por uma string armazenada em variável ou por índice; é a forma recomendada em funções e scripts.
  • Exemplo prático por nome:
    • Código:
      nome <- “x”
      df[[nome]]
    • Resultado: 1 2 3
  • Exemplo prático por índice:
    • Código:
      df[[1]] # primeira coluna
    • Resultado: 1 2 3

Passo 4

Método 3 — usando colchetes simples [ , ] (subconjunto; controle sobre tipo do retorno)
  • Sintaxe: df[, "coluna"], df[, 1], df["coluna"], df[ , "coluna", drop = FALSE].
  • Diferenças importantes:
    • df[, "coluna"] retorna por padrão um vetor (porque drop = TRUE é padrão).
    • df[, "coluna", drop = FALSE] retorna um data.frame com uma única coluna (útil quando quer preservar estrutura).
    • df["coluna"] retorna um data.frame com uma única coluna (pois isto é equivalente a df[ , "coluna", drop = FALSE]).
  • Quando usar: quando precisa especificamente de um data.frame de uma coluna (por exemplo para manter nomes de colunas) ou quando vai trabalhar com índices.
  • Exemplos:
    • Código: df[, "x"] → Resultado: vetor 1 2 3.
    • Código: df["x"] → Resultado: data.frame de 1 coluna e 3 linhas.
    • Código: df[, "x", drop = FALSE] → idem df["x"].

Passo 5

Acessando por nome armazenado em variável (programaticamente)
  • Use [[ ]] ou [, ] com a variável:
    • colname <- "idade"
    • df[[colname]] # retorna vetor
    • df[, colname] # geralmente retorna vetor
    • df[, colname, drop = FALSE] # retorna data.frame
  • Por que isso importa na prova: às vezes os exercícios pedem construir funções que recebem o nome da coluna como argumento; você precisa usar [[ ]] ou [, ...], não \$.

Passo 6

Tibbles (pacote tibble / tidyverse) e dplyr — diferenças sutis
  • Em um tibble (criado por tibble::tibble() ou dplyr::as_tibble()), df$coluna e df[["coluna"]] funcionam igual (retornam o vetor).
  • dplyr::select(df, coluna) retorna um tibble com a coluna; para obter vetor use dplyr::pull(df, coluna) ou %>% pull(coluna).
  • Exemplo:
    • Código:
      library(dplyr)
      df %>% pull(x) # retorna vetor
      df %>% select(x) # retorna tibble/data.frame com uma coluna

Passo 7

Nomes de colunas não sintáticos (espaços, traços, começam com número, símbolos)
  • Problema: df\("nome com espaço" não é recomendado; df\)nome com espaço é sintaticamente inválido.
  • Soluções:
    • Use df[["nome com espaço"]].
    • Ou use df\(\nome com espaço`(backticks):df)`nome com espaço`` (útil interativamente).
    • Para programático: col <- "nome com espaço"; df[[col]].
  • Dica: make.names() transforma nomes em sintáticos, mas cuidado — altera os nomes originais.

Passo 8

Tipo de retorno e consequência prática (vetor vs data.frame)
  • Por que isso importa: operações vetoriais (por exemplo mean(df\(x)) exigem que se tenha um vetor numérico; se você fizer mean(df["x"]) isso falha porque df["x"] é data.frame. Use df\)x, df[["x"]] ou df[, "x"] para obter vetor.
  • Para manter colunas e nomes (por exemplo para escrever de volta um data.frame filtrado), use df["x"] ou df[, "x", drop = FALSE].

Passo 9

Outras funções úteis e boas práticas
  • names(df) ou colnames(df) lista nomes de colunas (útil quando estiver perdido).
  • str(df) mostra estrutura dos tipos (útil para ver se a coluna é factor, character, numeric etc.).
  • Evite attach(df) em scripts/exames — pode confundir nomes e gerar bugs.
  • Para converter factor para character: as.character(df\(coluna); para número: as.numeric(as.character(...)) ou se já numérico as.numeric(df\)coluna).
  • Em provas, prefira clareza: df[["col"]] quando nome vem de variável; df$col quando escrever código curto e conhecer o nome.

Passo 10

Resumo de exemplos curtos (para decorar e praticar)
  • Criar exemplo:
    • Código:
      df <- data.frame(idade = c(20,30,40), nome = c(“A”,“B”,“C”))
  • Acessos:
    • df$idade # vetor numérico
    • df[["idade"]] # vetor numérico (útil programaticamente)
    • df["idade"] # data.frame de 1 coluna
    • df[, "idade"] # vetor numérico (equivalente a df[["idade"]])
    • df[, "idade", drop = FALSE] # data.frame de 1 coluna
    • df %>% pull(idade) # com dplyr, retorna vetor

Resposta

df$coluna
df[[“coluna”]]
df[, “coluna”] (vetor)
df[“coluna”] (data.frame de 1 coluna)
df[, “coluna”, drop = FALSE] (data.frame de 1 coluna)
dplyr::pull(df, “coluna”)

Exercícios relacionados