No próximo passo, vamos supor que a coleta de dados tenha sido feita separadamente por distrito, resultando em cinco subconjuntos de dados que precisam ser combinados em um único conjunto de dados completo. Para isso, usaremos a função bind_rows()
. Em nosso exemplo, todos os cinco subconjuntos de dados têm exatamente o mesmo número de variáveis, que também têm exatamente os mesmos nomes! Com o argumento .id
, criamos uma variável chamada "origem"
, que indica a origem do caso. Esta variável é automaticamente numerada. Com mutate()
, transformamos isso em um fator que contém uma descrição mais clara (processo1, processo2, processo3, processo4, processo5)
pssAll <- pss1 %>%
bind_rows(
list(
pss5,
pss7,
pss10,
pss12
),
.id = "origin"
) %>%
mutate(
origin = factor(
origin,
labels = c(
"process1",
"process2",
"process3",
"process4",
"process5"
)
)
)
table(pssAll$origin)
##
## process1 process2 process3 process4 process5
## 1000 1000 1000 1000 1000
head(pssAll$origin)
## [1] process1 process1 process1 process1 process1 process1
## Levels: process1 process2 process3 process4 process5
Assim, combinamos os cinco subconjuntos de dados em um único conjunto que contém todos os casos dos cinco subconjuntos. Importante ressaltar que, neste caso, todos os nomes das variáveis eram iguais!
Agora vamos testar o que acontece quando há um erro de digitação, por exemplo, em um subconjunto de dados. Primeiro, vamos criar dois novos conjuntos de dados, cada um com apenas 3 casos, e variáveis diferentes.
pssA <- pss[1:3, 2:3]
District <- c(
"Distrikt 1",
"Distrikt 5",
"Distrikt 7"
)
gndr <- c(
"male",
"female",
"female"
)
pssB <- data.frame(
District,
gndr
)
head(pssA)
## district gndr
## 1 Distrikt 1 male
## 2 Distrikt 1 male
## 3 Distrikt 1 male
head(pssB)
## District gndr
## 1 Distrikt 1 male
## 2 Distrikt 5 female
## 3 Distrikt 7 female
Ambos os conjuntos de dados têm as variáveis Distrito e Gênero. No conjunto de dados pssB
, no entanto, a variável de Distrito está escrita de forma diferente. Vamos testar o bind_rows()
.
pssTest <- pssA %>%
bind_rows(pssB)
pssTest
## district gndr District
## 1 Distrikt 1 male <NA>
## 2 Distrikt 1 male <NA>
## 3 Distrikt 1 male <NA>
## 4 <NA> male Distrikt 1
## 5 <NA> female Distrikt 5
## 6 <NA> female Distrikt 7
Como os nomes das variáveis não são exatamente iguais, serão criadas três variáveis: district
, gndr
e District
. Onde a variável não está presente, NAs
são automaticamente gerados. Isso é vantajoso, mas pode se tornar complicado se não houver um esquema de nomenclatura rigoroso ao criar o conjunto de dados. Solução: Definir e renomear as variáveis antecipadamente. Caso contrário, pode-se usar full_join()
.
Este método não é menos trabalhoso do que renomear as colunas, mas ainda oferece uma alternativa. Com full_join()
, combinamos dois conjuntos de dados e podemos especificar no argumento by
quais colunas têm o mesmo conteúdo. A desvantagem aqui é que os mesmos nomes de colunas também devem ser listados, caso contrário (como no exemplo aqui) as variáveis gndr.x
e gndr.y
serão criadas. Isso ocorre porque full_join()
é originalmente destinado a adicionar novas/variáveis adicionais.
Em nosso exemplo, indicaríamos que a coluna district
do conjunto de dados pssA
é igual à coluna District
do conjunto de dados pssB
. O mesmo vale para a variável gndr
.
pssTest2 <- pssA %>%
full_join(
pssB,
by = c(
"district" = "District",
"gndr" = "gndr"
)
)
head(pssTest2)
## district gndr
## 1 Distrikt 1 male
## 2 Distrikt 1 male
## 3 Distrikt 1 male
## 4 Distrikt 5 female
## 5 Distrikt 7 female
Assim, é possível mesclar conjuntos de dados com nomes de variáveis diferentes!