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,
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 colunacoluna. - 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).
- Código:
- Observação:
df$colunanã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"]]oudf[[i]]ondeié 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
- Código:
- Exemplo prático por índice:
- Código:
df[[1]] # primeira coluna - Resultado:
1 2 3
- Código:
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 (porquedrop = 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 adf[ , "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: vetor1 2 3. - Código:
df["x"]→ Resultado: data.frame de 1 coluna e 3 linhas. - Código:
df[, "x", drop = FALSE]→ idemdf["x"].
- Código:
Passo 5
Acessando por nome armazenado em variável (programaticamente)
- Use
[[ ]]ou[, ]com a variável:colname <- "idade"df[[colname]]# retorna vetordf[, colname]# geralmente retorna vetordf[, 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 portibble::tibble()oudplyr::as_tibble()),df$colunaedf[["coluna"]]funcionam igual (retornam o vetor). dplyr::select(df, coluna)retorna um tibble com a coluna; para obter vetor usedplyr::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
- Código:
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]].
- Use
- 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ê fizermean(df["x"])isso falha porquedf["x"]é data.frame. Usedf\)x,df[["x"]]oudf[, "x"]para obter vetor. - Para manter colunas e nomes (por exemplo para escrever de volta um data.frame filtrado), use
df["x"]oudf[, "x", drop = FALSE].
Passo 9
Outras funções úteis e boas práticas
names(df)oucolnames(df)lista nomes de colunas (útil quando estiver perdido).str(df)mostra estrutura dos tipos (útil para ver se a coluna éfactor,character,numericetc.).- 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éricoas.numeric(df\)coluna). - Em provas, prefira clareza:
df[["col"]]quando nome vem de variável;df$colquando 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”))
- Código:
- Acessos:
df$idade# vetor numéricodf[["idade"]]# vetor numérico (útil programaticamente)df["idade"]# data.frame de 1 colunadf[, "idade"]# vetor numérico (equivalente adf[["idade"]])df[, "idade", drop = FALSE]# data.frame de 1 colunadf %>% 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”)
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”)