Menu

Como Renomear Colunas no R (names, colnames, dplyr rename)

Renomear colunas de data frames no R: names() e colnames(), renomear por posição vs por nome, setNames(), rename() do dplyr e como limpar cabeçalhos bagunçados de importação.

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

Veja os Nomes Primeiro: names() e colnames()

Os nomes das colunas vivem em um atributo que você pode ler como qualquer vetor. names() e colnames() retornam ambos esse atributo para um data frame:

Mesma resposta. A única diferença real: colnames() também funciona com matrizes, names() não - por isso código genérico usa colnames(). Para data frames do dia a dia, eles são intercambiáveis.

O insight-chave para tudo abaixo: renomear uma coluna é atribuir a esse vetor. Não existe uma função dedicada no R base; você modifica names(df) com a mesma indexação que usa em qualquer vetor.

Renomear por Posição (Funciona, mas É Frágil)

Indexe o vetor de nomes pela posição e atribua:

A coluna 2 agora é price. Bom para uma correção rápida no modo interativo - e uma armadilha em um script. Posições são uma promessa sobre a ordem das colunas, e a ordem das colunas é a coisa menos estável em dados importados: no dia em que o CSV que você lê ganhar uma coluna extra, names(df)[2] renomeia a coluna errada, silenciosamente. Se um script renomeia por posição, uma mudança de esquema o quebra sem nenhuma mensagem de erro.

Renomear pelo Nome (O Idioma Robusto do R Base)

Compare com o nome antigo em vez de confiar em uma posição:

Leia a parte interna primeiro: names(sales) == "prc" produz FALSE TRUE FALSE - uma máscara lógica sobre o vetor de nomes. Indexar com ela seleciona a entrada correspondente, e a atribuição a substitui. Se "prc" não estiver lá, nada corresponde e nada muda (sem erro - então confira o resultado). Esse idioma sobrevive a reordenações, colunas adicionadas e copiar-e-colar em outros scripts. Memorize-o; ele é a resposta do R base para "renomear uma coluna".

Várias de Uma Vez

Substitua o vetor inteiro quando estiver nomeando todas as colunas (comum logo depois de uma importação), ou use match() para renomear um subconjunto escolhido:

match(old, names(df)) retorna as posições dos nomes antigos, então os nomes novos caem exatamente onde os antigos estavam - seguro quanto à ordem, como o idioma de nome único. Se algum nome antigo estiver faltando, match() retorna NA e a atribuição gera erro, que é o modo de falha que você quer: barulhento.

setNames() para Pipelines

Todos os idiomas acima modificam uma variável em duas etapas. setNames(object, names) retorna uma cópia renomeada em uma única expressão, que é o que um pipeline quer:

Útil quando uma função retorna um data frame sem nomes ou com nomes ruins e você quer corrigi-lo na hora - read_something() |> setNames(c("id", "value")) - sem uma variável temporária.

O Jeito dplyr: rename() e rename_with()

O rename() do dplyr recebe pares new = old - nome novo primeiro, o que todo mundo inverte pelo menos uma vez (estático; o sandbox executa apenas R base):

library(dplyr)

sales |> rename(price = prc, qty = q)

Nomes antigos não mencionados na chamada são mantidos como estão, e um nome antigo com erro de grafia é um erro explícito em vez de um silêncio sem efeito - uma melhoria genuína sobre o idioma do R base. Para renomear por regra em vez de por par, rename_with() aplica uma função aos nomes:

sales |> rename_with(toupper)                          # every column
sales |> rename_with(toupper, starts_with("p"))        # just some

Veja a introdução ao dplyr para saber como eles se encaixam na família de verbos.

Limpando Cabeçalhos Bagunçados de Importação

Cabeçalhos de CSV do mundo real chegam como "Order ID", "unit.price ($)", "2024 Total" - nomes com espaços e símbolos que forçam aspas com crase em todo lugar. O make.names() do R base converte qualquer vetor de caracteres em nomes válidos de R:

Válido, mas feio do seu próprio jeito (X2024.Total). É por isso que muitos times padronizam o clean_names() do pacote janitor, que produz um snake_case arrumado (order_id, unit_price, x2024_total) em uma única chamada: df |> janitor::clean_names(). Se você importa arquivos bagunçados toda semana, ele se paga imediatamente.

O Que Você Leva Daqui

  • Nomes de colunas são apenas um vetor: leia-os com names()/colnames(), renomeie atribuindo a ele.
  • names(df)[2] <- "new" é frágil; names(df)[names(df) == "old"] <- "new" é o idioma para memorizar.
  • match() renomeia várias pelo nome; setNames() renomeia inline em um pipeline.
  • O rename(new = old) do dplyr gera erro com nomes ausentes (bom) e rename_with() renomeia por regra.
  • Para cabeçalhos bagunçados de importação: make.names() no R base, janitor::clean_names() para resultados bonitos.

A seguir: ordenação - sort() para vetores, o truque do order() para data frames e arrange().

Perguntas frequentes

Como renomeio uma coluna no R?

O idioma robusto do R base é comparar pelo nome: names(df)[names(df) == "old"] <- "new". Ele encontra a coluna chamada old onde quer que ela esteja e a renomeia. No dplyr é rename(df, new = old) - atenção à ordem: o nome novo vem primeiro.

Qual é a diferença entre names() e colnames()?

Em um data frame, nenhuma na prática - ambos leem e definem os nomes das colunas. colnames() também funciona com matrizes (onde names() não funciona), então código feito para lidar com ambos tende a usar colnames(). Em data frames comuns, use o que preferir.

Como renomeio uma coluna por posição no R?

Atribua ao vetor de nomes naquela posição: names(df)[2] <- "price" renomeia a segunda coluna. Funciona, mas é frágil - no dia em que uma coluna for adicionada ou o CSV mudar a ordem das colunas, a posição 2 será uma coluna diferente. Prefira renomear pelo nome.

Como renomeio várias colunas de uma vez no R?

Atribua um vetor completo: names(df) <- c("id", "name", "price") substitui todos os nomes na ordem. Para renomear algumas escolhidas pelo nome, use match(): names(df)[match(c("old1", "old2"), names(df))] <- c("new1", "new2"). No dplyr: rename(df, new1 = old1, new2 = old2).

Coddy programming languages illustration

Aprenda a programar com o Coddy

COMEÇAR