Como modificar dados específicos em um dataframe no R?

Em alguns trabalhos de monitoramento, modificamos as áreas estudadas, principalmente unindo elas. Aprenda como realizar essa união no R, ou seja, como modificar os nomes existentes no seu data.frame.

Quanto trabalhamos com monitoramentos ambientais de áreas recuperadas, normalmente dividimos a área de interesse em blocos, zonas ou regiões.

Essa divisão busca diferenciar locais com características distintas antes do momento da recuperação ambiental.

Tais características podem interferir no processo de recuperação, cabendo ao monitoramento mostrar se há um referido parâmetro monitorado sendo influenciado ou não por estas condições iniciais.

Os locais com características semelhantes são chamados de Zonas Homólogas.

As áreas monitoradas podem ser nomeadas logo após o inicio das obras de recuperação, facilitando, inclusive, o gerenciamento da obra de recuperação ambiental.

Entretanto, quando o monitoramento é iniciado, e após alguns anos, pode ficar interessante unir as áreas avaliadas, de forma a reduzir custos.

Essa união ocorre quando observa-se ao longo do monitoramento que é possível reduzir a quantidade de amostras sem prejudicar a interpretação e avaliação da recuperação ambiental.

Entretanto, para quem estava monitorando, essas uniões podem gerar problemas nos banco de dados.

Desta forma, vamos demonstrar como utilizar o R para, em um exemplo fictício, converter antigas zonas de monitoramento em blocos (os quais abrangem várias zonas).

Nossa condição é a seguinte, temos uma área recuperada a qual apresenta 20 zonas de monitoramento da qualidade do solo.

Após 5 anos de monitoramento, os profissionais envolvidos verificaram que seria possível reduzir o número de zonas, agrupando-as em apenas 5 blocos de monitoramento, conforme relação abaixo.

  • Zona 01 = Bloco 01;
  • Zona 02 = Bloco 01;
  • Zona 03 = Bloco 01;
  • Zona 04 = Bloco 01;
  • Zona 05 = Bloco 02;
  • Zona 06 = Bloco 02;
  • Zona 07 = Bloco 02;
  • Zona 08 = Bloco 02;
  • Zona 09 = Bloco 03;
  • Zona 10 = Bloco 03;
  • Zona 11 = Bloco 03;
  • Zona 12 = Bloco 03;
  • Zona 13 = Bloco 04;
  • Zona 14 = Bloco 04;
  • Zona 15 = Bloco 04;
  • Zona 16 = Bloco 04;
  • Zona 17 = Bloco 05;
  • Zona 18 = Bloco 05;
  • Zona 19 = Bloco 05;
  • Zona 20 = Bloco 05;

Como realizar todas essas trocas no nosso banco de dados (data frame) no R de forma fácil e rápida?

Substituições em um dataframe no R

Primeiro, iremos criar um banco de dados genérico para trabalharmos com esses dados. O código abaixo demonstra esse procedimento.


zonas <- c("Zona 01", "Zona 02", "Zona 03", "Zona 04", "Zona 05", "Zona 06", "Zona 07", "Zona 08", "Zona 09", "Zona 10", "Zona 11", "Zona 12", "Zona 13", "Zona 14", "Zona 15", "Zona 16", "Zona 17", "Zona 18", "Zona 19", "Zona 20")
dadosMon <- data.frame(area = zonas)

Criamos um data frame com uma coluna chamada area, na qual foi atribuída a variável zonas.

Note que, ao digitar no terminal, class(dadosMon$area), você irá ver que os nossos dados são do tipo fator. Em outras palavras, são variáveis nominais, elas recebem um nome específico.

Diferente dos textos, as variáveis nominais representam classes, devendo sempre uma delas ser selecionada.

Quando estamos trabalhando com fatores, precisamos utilizar uma função específica. Esta função é a levels(), a qual nos fornece todas as classes existentes dentro da variável que contém o fator.

Ao digitar no terminal, levels(dadosMon$area), você irá receber como resposta todas as zonas salvas.

Agora que conhecemos a função levels(), vamos à substituição.

Inicialmente, iremos chamar a função levels() com a coluna com os nomes da área, em seguida, usaremos a estrutura de colchetes para passar para o R que desejamos alguns itens específicos dentro do data frame.

Quais itens específicos são esses? Justamente a lista que apresentamos anteriormente. Vamos realizar o primeiro exemplo.


# Quando os dados são fatores:

levels(dadosMon$area)[levels(dadosMon$area)=="Zona 01"] <- "Bloco 01"
levels(dadosMon$area)[levels(dadosMon$area)=="Zona 02"] <- "Bloco 01"
levels(dadosMon$area)[levels(dadosMon$area)=="Zona 03"] <- "Bloco 01"
levels(dadosMon$area)[levels(dadosMon$area)=="Zona 04"] <- "Bloco 01"

Com essas quatro linhas de código, substituímos as Zonas 01 à 04 pelo Bloco 01. Note que as informações antigas foram perdidas, foram apagadas – No final da postagem, veremos como criar uma coluna nova para inserir os dados (sem apagá-los).

Vamos repetir o processo para as zonas 05 à 08.


levels(dadosMon$area)[levels(dadosMon$area)=="Zona 05"] <- "Bloco 02"
levels(dadosMon$area)[levels(dadosMon$area)=="Zona 06"] <- "Bloco 02"
levels(dadosMon$area)[levels(dadosMon$area)=="Zona 07"] <- "Bloco 02"
levels(dadosMon$area)[levels(dadosMon$area)=="Zona 08"] <- "Bloco 02"

Mesmo este código funcionando perfeitamente, podemos reduzi-lo para apenas uma linhas. Vamos utilizar %in% para apresentar um conjunto de valores que poderão ser substituídos. Veja exemplo abaixo.


levels(dadosMon$area)[levels(dadosMon$area) %in% c("Zona 09", "Zona 10", "Zona 11", "Zona 12")] <- "Bloco 03"

O mesmo pode ser aplicado para as zonas que estão presentes no Bloco 4 e 5.


levels(dadosMon$area)[levels(dadosMon$area) %in% c("Zona 13", "Zona 14", "Zona 15", "Zona 16")] <- "Bloco 04"
levels(dadosMon$area)[levels(dadosMon$area) %in% c("Zona 17", "Zona 18", "Zona 19", "Zona 20")] <- "Bloco 05"

E se meus dados não fossem fatores? Como seria o procedimento?

Na situação em que os dados estiverem no formato de texto (“string”), não iremos utilizar a função levels(), conforme exemplo abaixo.


# Exemplo fictício, considerando que nosso data frame é compostos por variáveis do tipo texto.

dadosMon$area[dadosMon$area == "Zona 01"] <- "Bloco 01"
dadosMon$area[dadosMon$area == "Zona 02"] <- "Bloco 01"
dadosMon$area[dadosMon$area == "Zona 03"] <- "Bloco 01"
dadosMon$area[dadosMon$area == "Zona 04"] <- "Bloco 01"

### OU

zonas[zonas %in% c("Zona 05", "Zona 06", "Zona 07", "Zona 08")] <- "Bloco 02"

Agora, se nosso objetivo é não apagar os dados existentes, é necessário criar uma coluna nova para receber esses dados.

Esse procedimento é bem simples.

Basta você criar um nome para a sua variável no data frame, neste caso, iremos utilizar o nome “nomeAntigo” e indicar quais variáveis essa nova coluna irá receber. O código abaixo mostra esse processo.


dadosMon$nomeAntigo <- zonas

Simples, não?

Agora você pode realizar as análises dos seus monitoramentos ambientais e considerar as novas divisões adotadas.

Ficou com alguma dúvida? Deixe ela nos comentários que responderemos assim que possível.



Clique na figura abaixo e assine nossa lista de emails para receber nosso ebook "Como criar mapas de localização com ArcGIS 10.x".


Author: Fernando BS

Engenheiro Ambiental e de Segurança do Trabalho. Atua nas áreas de recuperação ambiental, geoprocessamento e ciência do solo. Busca soluções utilizando softwares como ArcGIS, R e MATLAB.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *