Como criar uma crosstab usando dplyr (com exemplos)
Você pode usar a seguinte sintaxe básica para produzir uma tabela cruzada usando funções dos pacotes dplyr e Tidyr em R:
df %>% group_by (var1, v ar2) %>% tally () %>% spread (var1,n)
Os exemplos a seguir mostram como usar essa sintaxe na prática.
Exemplo 1: Criar uma tabela cruzada básica
Suponha que temos o seguinte quadro de dados em R:
#create data frame df <- data. frame (team=c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'B'), position=c('G', 'G', 'F', 'C', 'G', 'F', 'F', 'C'), dots=c(7, 7, 8, 11, 13, 15, 19, 13)) #view data frame df team position points 1 AG 7 2 AG 7 3AF 8 4 AC 11 5 BG 13 6 BF 15 7 BF 19 8 BC 13
Podemos usar a seguinte sintaxe para criar uma tabela cruzada para as variáveis “equipe” e “posição”:
library (dplyr) library (tidyr) #produce crosstab df %>% group_by (team, position) %>% tally () %>% spread (team, n) # A tibble: 3 x 3 position AB 1 C 1 1 2 F 1 2 3 G 2 1
Veja como interpretar os valores da tabela cruzada:
- Existe 1 jogador que ocupa a posição “C” e pertence à equipe “A”
- Existe 1 jogador que ocupa a posição “C” e pertence à equipe “B”
- Existe 1 jogador que ocupa a posição “F” e pertence à equipe “A”
- Existem 2 jogadores que ocupam a posição “F” e pertencem à equipa “B”
- Existem 2 jogadores que ocupam a posição “G” e pertencem à equipe “A”
- Existe 1 jogador que ocupa a posição “G” e pertence à equipe “B”
Observe que podemos alterar as linhas e colunas da crosstab alterando a variável usada na função spread() :
library (dplyr) library (tidyr) #produce crosstab with 'position' along columns df %>% group_by (team, position) %>% tally () %>% spread (position, n) # A tibble: 2 x 4 # Groups: team [2] team CFG 1 A 1 1 2 2 B 1 2 1
Relacionado: Como usar o recurso Spread no Tidyr
Recursos adicionais
Os tutoriais a seguir explicam como executar outras funções comuns no dplyr:
Como calcular frequências relativas usando dplyr
Como selecionar colunas por índice usando dplyr
Como deletar linhas usando dplyr