O estudo da teoria de conjuntos visa oportunizar o aprendizado de relações básicas desenvolvidas em operações matemáticas e na resolução de problemas. Além disso, o estudo da teoria de conjutnos fornece elementos que podem servir de base para o aprendizado de programação e também de bancos de dados.
Ao obter coleções de elementos classificados a partir de certas características, estamos formando conjuntos. Os animais vertebrados, por exemplo, podem ser divididos em cinco classes: peixes, anfíbios, répteis, mamíferos e aves. Cada uma dessas classes de animais forma um conjunto. Na matemática, a ideia de conjunto é fundamental e está presente em diversos conceitos. Podemos formar conjuntos a partir de elementos de diferentes naturezas, tais como objetos, pessoas e números.
Exemplos
• Conjunto dos números naturais menores que 6: A = {1, 2, 3, 4, 5}
• Conjunto das vogais do nosso alfabeto: B = {a, e, i, o, u}
• Conjunto dos continentes: C = {África, América, Ásia, Europa, Oceania}
• Conjunto dos números pares positivos menores que 100: D = {2, 4, 6, 8, …, 100}
Neste trabalho será apresentado um material elaborado pelos autores que visa oportunizar o aprendizado de teoria de conjuntos com a complementação de atividades usuais presentes em livros didátivos com procedimentos computacionais dessenvolvidos no software R e através do seu GUI RStudio.
O software R é uma linguagem e, ao mesmo tempo, um ambiente computacional estatístico que permite a realização de cálculos, simulações e desenvolvimento de modelos. Permitindo a realização de uma grande variedade de cálculos matemáticos, estatísticos, construção de gráficos e simulações (BECHER; MACHADO, 2018.
Uma característica muito importane e útil do R é que ele permite o acréscimo de packages, que são extensões desenvolvidas e distribuidas por usuários que facilitam a realização de certos procedimentos ou adicionam novas funcionalidades. No estudo da teoria de conjuntos além do R e do RStudio também precisaremos do package VennDiagram.
Cada componente de um conjunto é denominado elemento e, de maneira geral, os conjuntos são indicados por letras maiúsculas e seus elementos ou são dispostos entre chaves separados por vírgula ou ainda podem ser indicados a partir da Regra ou Lei de Formação que indica quais são os seus elementos.
Exemplos
• Conjunto dos números naturais impares menores que 10: A = {1, 3, 5, 7, 9}
• Conjunto dos números maiores que 10 e menores que 20: B = {x|x é um número maior que 10 e menor do que 20}
Um conjunto também pode ser indicado por meio de uma figura chamada Diagrama de Venn. Quando um elemento compõe um conjunto, dizemos que ele elemento pertence ao conjunto. De maneira semelhante, quando ele não compõe o conjunto, dizemos que ele não pertence ao conjunto.
Exemplo:
Podemos escrever que: \(7\in E\) ou, quando o elemento não pertence ao conjunto \(8 \notin E\).
O conjunto D é formado pelos números quadrados perfeitos ímpares menores que 150. Quantos elementos pertencem ao conjunto D?
(Unifor - CE, Adaptada) Seja o número 6X3Y, em que X e Y substituem os algarismos das centenas e das unidades, respectivamente. Determine o total de pares de valores (X, Y) que tornam tal número divisível por 15 e escreva a lei de formação do conjunto destes pares, fazendo a uma representação através de um diagrama de Venn.
Para criar-se conjuntos no R o modo mais intuitivo e simples é procedermos a digitação dos elementos diretamente na linha de comando. Cabe notar que neste processo também devemos indicar o nome do conjunto no qual os elementos ficaram armazenados. O que é feito através do comando c
que indica para o R combinar ou concatenar os valores mencionados.
No caso de valores numéricos basta digitarmos os valores diretamente, entretanto no caso de elementos alfabuméricos é preciso colocá-los entre aspas.
Dois conjuntos A e B são iguais quando eles possuem os mesmos elementos, ainda que algum deles possa ser repetido. Ou seja, dois conjuntos são iguais quando possuem os mesmo elementos, independente da quantidade. Se a igualdade for verificada escrevemos \(A = B\).
Por outro lado, dois conjuntos não são iguais quando pelo menos um dos elementos pertence a apenas um dos conjuntos e, nestes casos escrevemos \(A\neq B\).
Por exemplo, o conjunto A={x|x é um número maior que -2 e menor ou igual a 4} e o conjunto B={-1, 0, 1, 2, 3, 4} possuem os mesmo elementos e, assim os conjuntos A e B sáo ditos iguais.
A forma mais simples para gerar um sequência no R é usando :
. Neste caso basta indicarmos o inicio e o final da sequência. Por exemplo: 1:10
irá produzir uma sequência e números inteiros que inicia em 1 e termina em 10.
A segunda forma de gerar sequências é com o uso do comando seq
. Este comando permite a criação de sequências com intervalo diferente de um inteiro. Por exemplo: seq(1, 10, 2)
irá gerar uma sequência que inicia no número 1 e terá um intervalo de duas unidades até o próximo termo, sendo o último termo da sequência igual a 10 ou então o menor valor que respeito o intervalo indicado. Com o comando seq
é possível gerar sequências decrescentes especificando o intervalo com um valor negativo.
Por fim, a terceira forma de gerar conjuntos sequenciais é usando o comando rep
. Neste comando devemos indicar o valor que será repetido e quantas vezes isso acontecerá. Por exemplo: rep(2,5)
irá criar um sequência com o número 2 repetido 5 vezes. Já se quisermos especificar um número de repetições diferentes para cada valor podemos fazer: rep(c("A", "B", "C"), c(3, 4, 2))
.
Para criamos diagramas Venn no R vamos utilizar um package chamado VennDiagram. Iniciamos abrindo o RStuido e depois carregando o VennDiagram digitando:
library(VennDiagram)
Uma vez carregado o package podemos começar as representações. Vamos iniciar representando apenas um conjunto. Para isso primeiro vamos delimitar o número de elementos do conjunto para depois fazermos a sua representação com a ajuda do VennDiagram. Neste caso vamos armazenar o número de elementos na variável a porém poderíamos informar diretamente na linha de comando.
a1<- 22
draw.single.venn(area = a1, category = "Area 1")
Algumas características do diagrama criado podem ser alteradas pelos seguintes comandos:
lty = retira a linha ou altera a cor
fill = cor de preenchimento
alpha = transparência
draw.single.venn( area = a1, category = "Area 1", lty = "blank", fill = "blue", alpha =.3)
Depois de aprender a fazer a representação do diagrama de um conjunto vamos passar para o passo seguinte que é representar dois conjuntos. A primeira coisa a fazer é criar o vetor indicando a quantidade de elementos do segundo conjunto a2<- 20
.
Feita a criação do segundo vetor vamos criar o diagrama com dois conjuntos.
draw.pairwise.venn(area1 = a1, area2 = a2, cross.area = 11, category = c("Area 1", "Area 2"))
Da mesma forma como foi feito com a represntação de um único conjunto também podemos alterar a cor de preenchimento, as linhas e a transparência repectivamente com fill, lty e alpha. Contudo, aqui também incluímos o parâmetro cat.pos
que define a posição das legendas dos conjuntos e varia entre 0 e 360 graus.
Observe que indicamos através das variáveis a1
e a2
a quantidade de elementos dos conjuntos e a quantidade de elementos da interseção é indicada no parâmetro cross.area
dentro do comando draw.pairwise.venn
. Contudo, como já mencionado, em construções simples poderíamos indicar diretamente no comando draw.pairwise.venn
todos os valores.
A seguir vamos refazer o diagrama anterior alterando algumas características.
draw.pairwise.venn(a1, a2, 11, category = c("Area 1", "Area 2"), lty = rep("blank", 2), fill = c("light blue", "red"), alpha = c(0.3, 0.2), cat.pos = c(0, 0))
Se quisermos fazer a representação de dois conjuntos disjuntos, ou seja, que não possuem nenhuma interseção devemos definir o parâmetro cross.area
como 0, para indicar que não existem elementos em comum.
draw.pairwise.venn(area1 = a1, area2 = a2, cross.area = 0, category = c("Area 1", "Area 2"), cat.pos = c(0, 180))
Então… agora vamos começar a deixar as coisas um pouco mais complexas com a representação de 3 conjuntos.
Da mesma forma como foi feito antes, uma vez que vamos reaproveitar os dois vetores anteriormente criados, o primeiro passo é criar o vetor indicativo da quantidade de elementos do terceiro conjunto a3<- 14
.
Na sequência usamos a função draw.triple.venn
do package VennDiagram para fazer a representação desejada mas, observe que é necessário indicar também o valor das interseções entre os três conjuntos nos parâmetros n12
, n23
, n13
e n123
.
draw.triple.venn(area1 = a1, area2 = a2, area3 = a3, n12 = 11, n23 = 4, n13 = 5, n123 = 2)
Para adicionar alguns efeitos que ajudam na hora de analisar o diagrama podemos proceder da mesma forma como foi feito com os diagramas mais simples.
draw.triple.venn(area1 = a1, area2 = a2, area3 = a3, n12 = 11, n23 = 4, n13 = 5, n123 = 2, category = c("Area 1", "Area 2", "Area 3"), lty = "blank", fill = c("skyblue", "yellow", "pink"))
Considere os conjuntos A = {2,4,6,8,10} e B = {1,2,3,4,5}. Podemos escrever um conjunto C formado por todos os elementos que pertencem a A e B, logo, C = {1,2,3,4,5,6,8,10}.
Definimos o conjunto C como o conjunto união dos conjuntos A e B e indicamos por \(A \cup B=C\). Assim, também podemos escrever A \(\cup\) B= {x|x \(\in\) A ou x \(\in\) B}.
Utilizando um diagrama Venn a representação da união de dois conjuntos fica:
Primeiro devemos criar os conjuntos para depois, com o uso do comando union
realizar a união.
Considerando os conjuntos A e B utilizados na operação de união, o conjunto C formado por todos os elementos que fazem parte de A e B simultâneamente é chamado de intersecção de A e B, ou seja, C = {2,4}. A interesecção dos conjuntos A e B é indicada por A \(\cap\) B e temos que A \(\cap\) B = {x|x \(\in\) A e x \(\in\) B}.
Assim como na união devemos criar os conjuntos que desejamos interseccionar para depois, usando o comando ´intersect´ determinarmos a intersecção dos conjuntos.
Ainda considerando os conjuntos A e B, podemos chamar o conjunto C formado por todos os elementos pertencentes a A e não pertencem a B, como o conjunto diferença entre A e B. ou seja C = {6,8,10}. Indicamos por A – B = {x|x \(\in\) A e x \(\notin\) B}.
Iniciamos criando os conjuntos que queremos subtrair e usando o comanod `setdiff´ encontramos a diferança do primeiro conjunto e relação ao segundo. Observe que esta fazer \(A - B\) é diferente de fazer \(B - A\). ***
Nota
Quantos elementos a união de dois conjuntos terá?
Observe o seguinte exemplo…
Dados dois conjuntos A={a,b,c,d,e,f,g,h,i} e B={a,e,i,o,u} teremos n(A)=9 e n(B)=5. Contudo, ao realizarmos a união dos conjunots A e B teremos elementos em comum, assim precisamos descontar esta quantidade de elementos da soma direta. Para fazer isso determinamos o número de elementos da intersecção dos conjuntos A e B e obtemos n(A\(\cap\)B)=3.
Desta forma o conjunto formado pela união terá 11 elementos (11 = 9+5-3).
Podemos representar este procedimento por: n(A\(\cup\)B)=n(A)+n(B)-n(A\(\cap\)B)
Agora que já sabemos como funcionam as operações com conjuntos vamos colocar o R para trabalhar para a gente, fazendo com que ele faça a contagem dos elementos e gere os diagrams de Venn que representem as relações nas quais estamos interessados.
É importante perceber que teremos duas situações diferentes, a primeira estaremos contando elementos armazenados em um vetor e na segunda contaremos elementos armazenados em um dataframe.
Já vimos como criar diagramas utilizando o package VennDiagram vamos tormar o processo um pouco mais automatizado e interessante, com o R não só podemos criar os diagramas mas também faze-lo contar os elementos de cada conjunto e suas respecitivas interseções utilizando os comandos que aprendemos há pouco.
Antes de tudo primeiro criaremos quatro vetores e também uma paleta de cores. Os vetores serão os nossos conjuntos e cada um terá 300 números, sorteados pelo R aleatóriamente entre 1 e 1000.
Uma paleta é um conjunto de corres que usaremos para representar os conjuntos quando criarmos os diagramas. Note que não precisamos definir uma paleta pois o R já tem cores pré-definidas contudo, como desejamos mostrar que é possível escolher as cores adotamos este procedimento.
set1<- sample(1:1000, 300)
set2<- sample(1:1000, 300)
set3<- sample(1:1000, 300)
set4<- sample(1:1000, 300)
colors<- c("#6b7fff", "#c3db0f", "#ff4059", "#2cff21")
Para calcularmos as quantidades de elementos de cada vetor utilizaremos a função length
e, para encontrarmos a interseção dos conjuntos criados(vetores) usaremos a função intersect
que encontra a interseção entre os conjuntos.
length(set1)
## [1] 300
intersect(set1, set2)
## [1] 126 548 841 319 778 385 365 278 975 23 499 545 656 665 430 706 14 387
## [19] 158 803 433 853 624 847 529 807 637 349 550 241 777 37 252 884 395 400
## [37] 298 393 754 474 618 384 956 675 748 905 170 625 11 686 865 161 696 538
## [55] 750 789 549 668 991 709 405 180 729 216 146 813 685 87 796 143 479 100
## [73] 531 855 30 25 207 144 678 133 497 81 375 348 186 580 332 942 175 899
## [91] 4 773 936 999 774 911 2 972 863 705
length(intersect(set1, set2))
## [1] 100
Os resultados apresentados acima exemplicam o uso das funções length
e intersect
e como podemos utilizá-las, ficando como exercício verificar as outras relações.
Podemos agora então adaptar o comando draw.triple.venn
para fazer todo o trabalho.
draw.triple.venn(area1 = length(set1), area2 = length(set2), area3 = length(set3), n12 = length(intersect(set1, set2)), n23 = length(intersect(set2, set3)), n13 = length(intersect(set1, set3)), n123 = length(intersect(intersect(set1, set2), set3)), category = c("Set 1", "Set 2", "Set3"), fill = colors[1:3])
Agora que já sabemos como contar os elementos de um conjunto e depois criar um diagrama de Venn vamos ampliar nossas possibilidades fazendo isso também com dataframes.
A primeira coisa a fazer é abrirmos o dataframe com o qual iremos trabalhar. Em nosso caso, ele se chama dante.
Podemos verificar que o dataframe tem 20 entradas e 11 colunas sendo 10 variáveis.
str(dante)
## 'data.frame': 20 obs. of 11 variables:
## $ nome : chr "Antonio" "Artur" "Aurea" "Bruno" ...
## $ sexo : chr "M" "M" "F" "M" ...
## $ idade : int 22 16 15 16 14 19 34 29 27 19 ...
## $ altura : int 169 174 163 164 168 165 177 159 162 169 ...
## $ peso : int 70 71 61 61 60 58 82 61 61 72 ...
## $ irmaos : int 2 1 0 0 1 1 1 3 2 2 ...
## $ cabelo : chr "castanho" "loiro" "loiro" "castanho" ...
## $ hobby : chr "musica" "musica" "ciclismo" "futebol" ...
## $ sapato : int 38 40 36 37 27 35 41 37 38 38 ...
## $ manequim : int 38 40 42 42 40 36 44 40 42 44 ...
## $ desempenhomat: chr "otimo" "bom" "insuficiente" "otimo" ...
Para fazermos o R contar o número de elementos de cada subconjunto primeiro vamos ver como fazer isso com dois subconjuntos. Incialmente vamos criar três subconjuntos que correspondem aos critérios que desejamos investigar. No nosso caso: caçar sapato 38 ou 39 e ter 22 anos de idade.
d1<- dante[dante$sapato == 38,]
d2<- dante[dante$sapato == 39,]
d12<- dante[(dante$sapato == 38 & dante$idade == 22) | ( dante$sapato == 39 & dante$idade == 22),]
Depois é que iremos criar os diagramas com as respectivas contagens. Observe que neste caso usaremos o comando nrow
para contar invés de length
. Isso acontece porque agora estamos lidando com um dataframe e não com um vetor.
draw.pairwise.venn(nrow(d1), nrow(d2), cross.area = nrow(d12), category = c("Calca 38", "Calca 39"), lwd = c(1,2), col = c("coral", "cyan3"), cat.pos = c(330, 30), fill = c("light blue", "green"), alpha = c(0.4, 0.5))
Para ajudar vamos repetir o procedimento, mas desta vez procuraremos identificar os indivíduos quanto ao sexo (M ou F) que tenham 22 anos de idade.
Novamente o primeiro passo é filtar o dataframe.
d1<- dante[dante$sexo == "M",]
d2<- dante[dante$sexo == "F",]
d12<- dante[(dante$sexo == "M" & dante$idade > 22) | ( dante$sexo == "F" & dante$idade > 22),]
Depois de feita a filtragem com a criação dos subconjuntos d1, d2 e d12 geramos o diagrama de Venn.
draw.pairwise.venn(nrow(d1), nrow(d2), cross.area = nrow(d12), category = c("Masc", "Fem"), lwd = c(1,2), col = c("coral", "cyan3"), cat.pos = c(330, 30), fill = c("light blue", "royalblue1"), alpha = c(0.4, 0.5))
Ótimo trabalho até aqui!!! Mas agora vamos vazer um diagrama que considere três fatores.
O processo é o mesmo de antes só que agora precisamos considerar mais subconjuntos uma vez que existem mais intersecções.
Neste caso vamos identificar os indivíduos pelas seguintes características: ser loiro, gostar de música e ser ter um bom desempenho em matemática.
d1<- dante[dante$cabelo == "loiro",]
d2<- dante[dante$hobby == "musica",]
d3<- dante[dante$desempenhomat == "bom",]
d12<- dante[(dante$cabelo == "loiro" & dante$hobby == "musica"),]
d23<- dante[(dante$hobby == "musica" & dante$desempenhomat == "bom"),]
d13<- dante[(dante$cabelo == "loiro" & dante$desempenhomat == "bom"),]
d123<- dante[(dante$cabelo == "loiro" & dante$hobby == "musica" & dante$desempenhomat == "bom"),]
Agora vamos fazer o diagrama.
draw.triple.venn(area1 = nrow(d1), area2 = nrow(d2), area3 = nrow(d3), n12 = nrow(d12), n23 = nrow(d23), n13 = nrow(d13), n123 = nrow(d123), category = c("Loiro", "Musica", "Bom Mat"), cat.pos = c(340, 20, 0), fill = c("light blue", "royalblue1", "light green"), reverse = FALSE)
Para saber quem, qual caso, corresponde as características pesquisadas podemos usar o comando which
. Neste primeiro exemplo existe apenas um caso que cumpre os três critérios estabelecidos. A função irá retornar qual é este caso.
which((dante$cabelo == "loiro" & dante$hobby == "musica" & dante$desempenhomat == "bom"))
## [1] 2
Neste segundo exemplo dois casos irão cumprir os dois critérios de busca.
which (dante$cabelo == "loiro" & dante$hobby == "musica")
## [1] 2 16
Mas e se eu quiser visualizar estes casos? Observe que o comando which
apenas indica qual é mas não o exibe na tela.
dante[which((dante$cabelo == "loiro" & dante$hobby == "musica" & dante$desempenhomat == "bom")),]
## nome sexo idade altura peso irmaos cabelo hobby sapato manequim
## 2 Artur M 16 174 71 1 loiro musica 40 40
## desempenhomat
## 2 bom
O caso exibido acima mostra a segunda linha do dataframe que apenas havia sido indicada anteriormente. Por outro lado o exemplo a seguir apresentará os dois casos identificados no segundo exemplo da função which
.
dante[which (dante$cabelo == "loiro" & dante$hobby == "musica"),]
## nome sexo idade altura peso irmaos cabelo hobby sapato manequim
## 2 Artur M 16 174 71 1 loiro musica 40 40
## 16 Mauro M 15 168 59 3 loiro musica 39 40
## desempenhomat
## 2 bom
## 16 insuficiente
Eventualmente pode ser necessário que se faça uma ordenação do dataframe. Isso pode ajudar a verificar quais casos cumpriam certos critérios. Para fazer isso podemos usar o comando order
.
dante[order(dante$idade),]
## nome sexo idade altura peso irmaos cabelo hobby sapato manequim
## 5 Carla F 14 168 60 1 loiro basquete 27 40
## 3 Aurea F 15 163 61 0 loiro ciclismo 36 42
## 16 Mauro M 15 168 59 3 loiro musica 39 40
## 2 Artur M 16 174 71 1 loiro musica 40 40
## 4 Bruno M 16 164 61 0 castanho futebol 37 42
## 14 Lucia F 16 162 57 1 castanho musica 35 38
## 15 Marcia F 16 174 60 4 preto ciclismo 38 38
## 13 Laura F 17 168 57 2 preto futebol 36 36
## 12 Jose M 18 171 65 2 preto futebol 40 40
## 20 Vania F 18 173 63 2 castanho futebol 39 40
## 6 Claudia F 19 165 58 1 ruivo basquete 35 36
## 10 Fernanda F 19 169 72 2 preto musica 38 44
## 18 Patricia F 20 170 59 0 loiro ler 38 38
## 17 Nivea F 21 172 61 2 castanho ler 37 38
## 1 Antonio M 22 169 70 2 castanho musica 38 38
## 11 Geraldo M 22 173 83 0 castanho ler 39 46
## 9 Flavia F 27 162 61 2 loiro corrida 38 42
## 19 Paula F 27 164 56 1 loiro corrida 35 36
## 8 Edite F 29 159 61 3 castanho ler 37 40
## 7 Domingos M 34 177 82 1 castanho futebol 41 44
## desempenhomat
## 5 regular
## 3 insuficiente
## 16 insuficiente
## 2 bom
## 4 otimo
## 14 bom
## 15 regular
## 13 bom
## 12 bom
## 20 bom
## 6 bom
## 10 regular
## 18 otimo
## 17 bom
## 1 otimo
## 11 bom
## 9 otimo
## 19 regular
## 8 otimo
## 7 insuficiente
Já se precisarmos fazer a ordenção em ordem descrescente.
dante[order(dante$idade, decreasing = TRUE),]
## nome sexo idade altura peso irmaos cabelo hobby sapato manequim
## 7 Domingos M 34 177 82 1 castanho futebol 41 44
## 8 Edite F 29 159 61 3 castanho ler 37 40
## 9 Flavia F 27 162 61 2 loiro corrida 38 42
## 19 Paula F 27 164 56 1 loiro corrida 35 36
## 1 Antonio M 22 169 70 2 castanho musica 38 38
## 11 Geraldo M 22 173 83 0 castanho ler 39 46
## 17 Nivea F 21 172 61 2 castanho ler 37 38
## 18 Patricia F 20 170 59 0 loiro ler 38 38
## 6 Claudia F 19 165 58 1 ruivo basquete 35 36
## 10 Fernanda F 19 169 72 2 preto musica 38 44
## 12 Jose M 18 171 65 2 preto futebol 40 40
## 20 Vania F 18 173 63 2 castanho futebol 39 40
## 13 Laura F 17 168 57 2 preto futebol 36 36
## 2 Artur M 16 174 71 1 loiro musica 40 40
## 4 Bruno M 16 164 61 0 castanho futebol 37 42
## 14 Lucia F 16 162 57 1 castanho musica 35 38
## 15 Marcia F 16 174 60 4 preto ciclismo 38 38
## 3 Aurea F 15 163 61 0 loiro ciclismo 36 42
## 16 Mauro M 15 168 59 3 loiro musica 39 40
## 5 Carla F 14 168 60 1 loiro basquete 27 40
## desempenhomat
## 7 insuficiente
## 8 otimo
## 9 otimo
## 19 regular
## 1 otimo
## 11 bom
## 17 bom
## 18 otimo
## 6 bom
## 10 regular
## 12 bom
## 20 bom
## 13 bom
## 2 bom
## 4 otimo
## 14 bom
## 15 regular
## 3 insuficiente
## 16 insuficiente
## 5 regular
Outra função que pode ajudar, caso se deseje verificar quais casos estão cumprindo certos critérios, é a função table
. Principalmente para fazermos tabelas cruzando duas ou mais variáveis.
table(dante$desempenhomat, dante$sexo)
##
## F M
## bom 5 3
## insuficiente 1 2
## otimo 3 2
## regular 4 0
Uma outra função que pode, eventualmente, ajudar a veririficar quantos casos(individuos) estão em cada subconjunto é a função summary
.
summary(dante)
## nome sexo idade altura
## Length:20 Length:20 Min. :14.00 Min. :159.0
## Class :character Class :character 1st Qu.:16.00 1st Qu.:164.0
## Mode :character Mode :character Median :18.50 Median :168.5
## Mean :20.05 Mean :168.2
## 3rd Qu.:22.00 3rd Qu.:172.2
## Max. :34.00 Max. :177.0
## peso irmaos cabelo hobby
## Min. :56.00 Min. :0.0 Length:20 Length:20
## 1st Qu.:59.00 1st Qu.:1.0 Class :character Class :character
## Median :61.00 Median :1.5 Mode :character Mode :character
## Mean :63.85 Mean :1.5
## 3rd Qu.:66.25 3rd Qu.:2.0
## Max. :83.00 Max. :4.0
## sapato manequim desempenhomat
## Min. :27.00 Min. :36.0 Length:20
## 1st Qu.:36.00 1st Qu.:38.0 Class :character
## Median :38.00 Median :40.0 Mode :character
## Mean :37.15 Mean :39.9
## 3rd Qu.:39.00 3rd Qu.:42.0
## Max. :41.00 Max. :46.0
Especifiamente, caso seja necessário calcular estatisticas por variável mas divididas por subgrupos podemos empregar o comando tapply
. Contudo observe que a função indicada para ser aplicada precisa estar adequada ao tipo de dado que consta da varíavel em análise.
tapply(dante$idade, dante$sexo, mean)
## F M
## 19.84615 20.42857
Ou então:
tapply(dante$desempenhomat, dante$sexo, summary)
## $F
## Length Class Mode
## 13 character character
##
## $M
## Length Class Mode
## 7 character character
BECHER, E. L.; MACHADO, L. B. Conhecendo o software R e suas possibilidades para o ensino de Estatística. In.: Anais do XIII Encontro Gaúcho de Educação Matemática. Santa Maria, 2018.