Curso
- Fazendo subsetting de linhas e colunas por índice
- Fazendo subsetting de linhas e colunas por nome
- Fazendo subsetting de linhas e colunas por valor
- Exercícios práticos
Seja para comparar como diferentes perfis demográficos respondem a campanhas de marketing, focar em um período específico ou puxar informações de alguns poucos produtos do estoque, fazer subsetting de conjuntos de dados permite extrair observações úteis do seu dataset. R é uma ótima ferramenta que torna esse processo simples e intuitivo. Ao final deste tutorial, você vai saber como extrair exatamente as informações que precisa do seu conjunto de dados.
Fazer subsetting não altera o conteúdo dos seus dados; ele apenas seleciona a parte mais relevante para o objetivo em mente. Em geral, há três maneiras de selecionar linhas e colunas do seu dataset — por índice, por nome e por valor.
Fazendo subsetting de linhas e colunas por índice
Uma forma de selecionar linhas e colunas é usando os índices do dataset. Isso é o mesmo que dizer "a primeira linha", "todas as linhas nas colunas 2 e 5" ou "a primeira linha das colunas 2 a 5". Vamos especificar essas expressões usando o dataset iris no R. Segundo a sua documentação, "[e]ste famoso conjunto de dados de íris (de Fisher ou Anderson) traz as medidas em centímetros das variáveis comprimento e largura da sépala e comprimento e largura da pétala, respectivamente, para 50 flores de cada uma das 3 espécies de íris. As espécies são Iris setosa, versicolor e virginica."
# "A primeira linha":
iris[1, ]
# "Todas as linhas nas colunas 2 e 5":
iris[, c(2, 5)]
# "A primeira linha das colunas 2 a 5":
iris[1, 2:5]
Para fazer subsetting, use colchetes após o objeto do seu dataset. As linhas do seu dataset são especificadas como o primeiro elemento dentro dos colchetes, e as colunas como o segundo, separados por vírgula:
data[rows, columns]
Fazendo subsetting de linhas e colunas por nome
No R, as linhas e colunas do seu dataset têm atributos de nome. Nomes de linha raramente são usados e, por padrão, fornecem índices — inteiros numerados de 1 até o número de linhas do dataset — exatamente como você viu na seção anterior. Na verdade, se você chamar rownames() no dataset iris, verá que eles vão de 1 a 150:
> rownames(iris)
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14"
[15] "15" "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28"
[29] "29" "30" "31" "32" "33" "34" "35" "36" "37" "38" "39" "40" "41" "42"
[43] "43" "44" "45" "46" "47" "48" "49" "50" "51" "52" "53" "54" "55" "56"
[57] "57" "58" "59" "60" "61" "62" "63" "64" "65" "66" "67" "68" "69" "70"
[71] "71" "72" "73" "74" "75" "76" "77" "78" "79" "80" "81" "82" "83" "84"
[85] "85" "86" "87" "88" "89" "90" "91" "92" "93" "94" "95" "96" "97" "98"
[99] "99" "100" "101" "102" "103" "104" "105" "106" "107" "108" "109" "110" "111" "112"
[113] "113" "114" "115" "116" "117" "118" "119" "120" "121" "122" "123" "124" "125" "126"
[127] "127" "128" "129" "130" "131" "132" "133" "134" "135" "136" "137" "138" "139" "140"
[141] "141" "142" "143" "144" "145" "146" "147" "148" "149" "150"
> nrow(iris)
[1] 150
Nomes de linha são mais comuns em datasets pequenos e ajudam a identificar facilmente as observações. Por exemplo, em um dataset pequeno com informações de saúde de pacientes de um médico, os nomes das linhas poderiam ser os nomes completos dos pacientes.
Já os nomes das colunas são onipresentes em praticamente qualquer dataset. Você pode acessá-los com as funções colnames() ou names():
colnames(iris)
[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
names(iris)
[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
Para selecionar seu dataset pelos nomes das linhas e colunas, basta usar novamente os colchetes, precedidos pelo objeto do dataset:
# Largura da sépala da quinta observação
iris["5", "Sepal.Width"]
# Largura da sépala e largura da pétala
iris[, c("Sepal.Width", "Petal.Width")]
É importante notar que tanto os nomes de linha quanto os de coluna são caracteres, então usar aspas simples ou duplas é absolutamente necessário!
Fazendo subsetting de linhas e colunas por valor
Selecionar linhas e colunas por valor costuma ser a forma mais flexível. Por exemplo, você pode extrair os dados de Iris setosa usando uma condição como esta:
> iris[iris$Species == "setosa", ]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
...
47 5.1 3.8 1.6 0.2 setosa
48 4.6 3.2 1.4 0.2 setosa
49 5.3 3.7 1.5 0.2 setosa
50 5.0 3.3 1.4 0.2 setosa
Condições como iris$Species == "setosa" ficam no elemento de linhas dentro dos colchetes (ou seja, o primeiro elemento antes da vírgula). Além da condição no primeiro elemento, você pode especificar colunas por índice ou por nome no segundo elemento. No console abaixo, tente selecionar apenas as medidas de sépala de Iris setosa:
# Imprima as medidas de sépala para setosa
# Imprima as medidas de sépala para setosa (por nome)
iris[iris$Species == "setosa", c("Sepal.Length", "Sepal.Width")]
# Imprima as medidas de sépala para setosa (por índice)
iris[iris$Species == "setosa", 1:2]
test_or(
test_output_contains('iris[iris$Species == "setosa", c("Sepal.Length", "Sepal.Width")]',
incorrect_msg = "Selecione apenas as colunas Sepal.Length e Sepal.Width para a íris setosa, seja por nome ou por índice."), test_output_contains('iris[iris$Species == "setosa", c("Sepal.Width", "Sepal.Length")]', incorrect_msg = "Selecione apenas as colunas Sepal.Length e Sepal.Width para a íris setosa, seja por nome ou por índice.")) success_msg("Mandou bem!") Recapitulando
Neste tutorial, você:
- Aprendeu a fazer subsetting do seu data frame por índice. Linhas e colunas são indexadas por inteiros de 1 até o número de linhas e colunas, respectivamente.
- Aprendeu a fazer subsetting do seu data frame por nome. Viu que nomes de linha raramente são especificados e que nomes de coluna são do tipo caractere.
- Aprendeu a usar condições no elemento de linhas dentro dos colchetes para selecionar seu data frame por valor.
- Aprendeu a combinar esses métodos para permitir seleções mais flexíveis (por exemplo, usando condições para linhas e selecionando por índice ou nome para colunas).
Abaixo há alguns exercícios para reforçar o que você viu. A prática leva à perfeição — vale a pena tentar!
Exercícios práticos
Selecione todas as observações em que a largura da sépala é maior que o comprimento da pétala.
# Quais observações têm largura da sépala maior que o comprimento da pétala?
# Quais observações têm largura da sépala maior que o comprimento da pétala?
iris[iris$Sepal.Width > iris$Petal.Length, ]
test_output_contains('iris[iris$Sepal.Width > iris$Petal.Length, ]',
incorrect_msg = paste("Selecione as observações em que os valores de Sepal.Width", "são maiores que os valores de Petal.Length.")) success_msg("Boa! Acontece que apenas Iris setosa tem esse formato.")
iris$Sepal.Width > iris$Petal.Length dentro dos colchetes. Não esqueça da vírgula!Selecione todas as Iris versicolor cuja largura da sépala é maior que a largura média da sépala entre todas as espécies.
# Armazene os dados de versicolor em um objeto chamado versicolor
# Selecione todas as Iris versicolor com largura de sépala acima da média
# Armazene os dados de versicolor em um objeto chamado versicolor
versicolor <- iris[iris$Species == "versicolor", ]
# Selecione todas as Iris versicolor com largura de sépala acima da média
versicolor[versicolor$Sepal.Width > mean(iris$Sepal.Width), ]
test_object('versicolor',
undefined_msg = "Você definiu o objeto versicolor?", incorrect_msg = paste("Selecione onde Species é igual a \"versicolor\".", "Lembre-se de usar o operador ==!")) test_output_contains('versicolor[versicolor$Sepal.Width > mean(iris$Sepal.Width), ]', incorrect_msg = paste("Quase lá! Você está usando a função mean()", "para calcular a largura média da sépala entre todas as espécies", "e não apenas para Iris versicolor?")) success_msg("Excelente trabalho!")
mean() para calcular a largura média da sépala em iris e, em seguida, use uma condição com prefixo versicolor para selecionar apenas quem tem valores acima da média.Informe a largura média da sépala para todas as Iris virginica que têm comprimento de pétala menor que 5 centímetros.
# Fique à vontade para resolver como preferir!
# Armazene os dados de virginica em um objeto chamado virginica
virginica <- iris[iris$Species == "virginica", ]
# Largura média da sépala para Iris virginica com comprimento de pétala menor que 5
mean(virginica[virginica$Petal.Length < 5, ]$Sepal.Width)
test_output_contains('2.8',
incorrect_msg = "Incorreto! Este é difícil mesmo!")
success_msg("Excelente!")
Petal.Length é menor que 5. Você pode calcular a média com a função mean().Quer aprender mais maneiras de extrair insights dos seus dados? Confira estes cursos na DataCamp!
Dê uma olhada no nosso tutorial Merging Datasets in R.
Seja para comparar como diferentes perfis demográficos respondem a campanhas de marketing, focar em um período específico ou puxar informações de alguns poucos produtos do estoque, fazer subsetting de conjuntos de dados permite extrair observações úteis do seu dataset. R é uma ótima ferramenta que torna esse processo simples e intuitivo. Ao final deste tutorial, você vai saber como extrair exatamente as informações que precisa do seu conjunto de dados.
Fazer subsetting não altera o conteúdo dos seus dados; ele apenas seleciona a parte mais relevante para o objetivo em mente. Em geral, há três maneiras de selecionar linhas e colunas do seu dataset — por índice, por nome e por valor.
Fazendo subsetting de linhas e colunas por índice
Uma forma de selecionar linhas e colunas é usando os índices do dataset. Isso é o mesmo que dizer "a primeira linha", "todas as linhas nas colunas 2 e 5" ou "a primeira linha das colunas 2 a 5". Vamos especificar essas expressões usando o dataset iris no R. Segundo a sua documentação, "[e]ste famoso conjunto de dados de íris (de Fisher ou Anderson) traz as medidas em centímetros das variáveis comprimento e largura da sépala e comprimento e largura da pétala, respectivamente, para 50 flores de cada uma das 3 espécies de íris. As espécies são Iris setosa, versicolor e virginica."
# "A primeira linha":
iris[1, ]
# "Todas as linhas nas colunas 2 e 5":
iris[, c(2, 5)]
# "A primeira linha das colunas 2 a 5":
iris[1, 2:5]
Para fazer subsetting, use colchetes após o objeto do seu dataset. As linhas do seu dataset são especificadas como o primeiro elemento dentro dos colchetes, e as colunas como o segundo, separados por vírgula:
data[rows, columns]
Fazendo subsetting de linhas e colunas por nome
No R, as linhas e colunas do seu dataset têm atributos de nome. Nomes de linha raramente são usados e, por padrão, fornecem índices — inteiros numerados de 1 até o número de linhas do dataset — exatamente como você viu na seção anterior. Na verdade, se você chamar rownames() no dataset iris, verá que eles vão de 1 a 150:
> rownames(iris)
[1] "1" "2" "3" "4" "5" "6" "7" "8" "9" "10" "11" "12" "13" "14"
[15] "15" "16" "17" "18" "19" "20" "21" "22" "23" "24" "25" "26" "27" "28"
[29] "29" "30" "31" "32" "33" "34" "35" "36" "37" "38" "39" "40" "41" "42"
[43] "43" "44" "45" "46" "47" "48" "49" "50" "51" "52" "53" "54" "55" "56"
[57] "57" "58" "59" "60" "61" "62" "63" "64" "65" "66" "67" "68" "69" "70"
[71] "71" "72" "73" "74" "75" "76" "77" "78" "79" "80" "81" "82" "83" "84"
[85] "85" "86" "87" "88" "89" "90" "91" "92" "93" "94" "95" "96" "97" "98"
[99] "99" "100" "101" "102" "103" "104" "105" "106" "107" "108" "109" "110" "111" "112"
[113] "113" "114" "115" "116" "117" "118" "119" "120" "121" "122" "123" "124" "125" "126"
[127] "127" "128" "129" "130" "131" "132" "133" "134" "135" "136" "137" "138" "139" "140"
[141] "141" "142" "143" "144" "145" "146" "147" "148" "149" "150"
> nrow(iris)
[1] 150
Nomes de linha são mais comuns em datasets pequenos e ajudam a identificar facilmente as observações. Por exemplo, em um dataset pequeno com informações de saúde de pacientes de um médico, os nomes das linhas poderiam ser os nomes completos dos pacientes.
Já os nomes das colunas são onipresentes em praticamente qualquer dataset. Você pode acessá-los com as funções colnames() ou names():
colnames(iris)
[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
names(iris)
[1] "Sepal.Length" "Sepal.Width" "Petal.Length" "Petal.Width" "Species"
Para selecionar seu dataset pelos nomes das linhas e colunas, basta usar novamente os colchetes, precedidos pelo objeto do dataset:
# Largura da sépala da quinta observação
iris["5", "Sepal.Width"]
# Largura da sépala e largura da pétala
iris[, c("Sepal.Width", "Petal.Width")]
É importante notar que tanto os nomes de linha quanto os de coluna são do tipo caractere, portanto usar aspas simples ou duplas é indispensável!
Fazendo subsetting de linhas e colunas por valor
Selecionar linhas e colunas por valor costuma ser a forma mais flexível. Por exemplo, você pode extrair os dados de Iris setosa usando uma condição como esta:
> iris[iris$Species == "setosa", ]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
...
47 5.1 3.8 1.6 0.2 setosa
48 4.6 3.2 1.4 0.2 setosa
49 5.3 3.7 1.5 0.2 setosa
50 5.0 3.3 1.4 0.2 setosa
Condições como iris$Species == "setosa" ficam no elemento de linhas dentro dos colchetes (ou seja, o primeiro elemento antes da vírgula). Além da condição no primeiro elemento, você pode especificar colunas por índice ou por nome no segundo elemento. No console abaixo, tente selecionar apenas as medidas de sépala de Iris setosa:
# Imprima as medidas de sépala para setosa
# Imprima as medidas de sépala para setosa (por nome)
iris[iris$Species == "setosa", c("Sepal.Length", "Sepal.Width")]
# Imprima as medidas de sépala para setosa (por índice)
iris[iris$Species == "setosa", 1:2]
test_or(
test_output_contains('iris[iris$Species == "setosa", c("Sepal.Length", "Sepal.Width")]',
incorrect_msg = "Selecione apenas as colunas Sepal.Length e Sepal.Width para a íris setosa, seja por nome ou por índice."), test_output_contains('iris[iris$Species == "setosa", c("Sepal.Width", "Sepal.Length")]', incorrect_msg = "Selecione apenas as colunas Sepal.Length e Sepal.Width para a íris setosa, seja por nome ou por índice.")) success_msg("Mandou bem!") Recapitulando
Neste tutorial, você:
- Aprendeu a fazer subsetting do seu data frame por índice. Linhas e colunas são indexadas por inteiros de 1 até o número de linhas e colunas, respectivamente.
- Aprendeu a fazer subsetting do seu data frame por nome. Viu que nomes de linha raramente são especificados e que nomes de coluna são do tipo caractere.
- Aprendeu a usar condições no elemento de linhas dentro dos colchetes para selecionar seu data frame por valor.
- Aprendeu a combinar esses métodos para permitir seleções mais flexíveis (por exemplo, usando condições para linhas e selecionando por índice ou nome para colunas).
Abaixo há alguns exercícios para reforçar o que você viu. A prática leva à perfeição — vale a pena tentar!
Exercícios práticos
Selecione todas as observações em que a largura da sépala é maior que o comprimento da pétala.
# Quais observações têm largura da sépala maior que o comprimento da pétala?
# Quais observações têm largura da sépala maior que o comprimento da pétala?
iris[iris$Sepal.Width > iris$Petal.Length, ]
test_output_contains('iris[iris$Sepal.Width > iris$Petal.Length, ]',
incorrect_msg = paste("Selecione as observações em que os valores de Sepal.Width", "são maiores que os valores de Petal.Length.")) success_msg("Boa! Acontece que apenas Iris setosa tem esse formato.")
iris$Sepal.Width > iris$Petal.Length dentro dos colchetes. Não esqueça da vírgula!Selecione todas as Iris versicolor cuja largura da sépala é maior que a largura média da sépala entre todas as espécies.
# Armazene os dados de versicolor em um objeto chamado versicolor
# Selecione todas as Iris versicolor com largura de sépala acima da média
# Armazene os dados de versicolor em um objeto chamado versicolor
versicolor <- iris[iris$Species == "versicolor", ]
# Selecione todas as Iris versicolor com largura de sépala acima da média
versicolor[versicolor$Sepal.Width > mean(iris$Sepal.Width), ]
test_object('versicolor',
undefined_msg = "Você definiu o objeto versicolor?", incorrect_msg = paste("Selecione onde Species é igual a \"versicolor\".", "Lembre-se de usar o operador ==!")) test_output_contains('versicolor[versicolor$Sepal.Width > mean(iris$Sepal.Width), ]', incorrect_msg = paste("Quase lá! Você está usando a função mean()", "para calcular a largura média da sépala entre todas as espécies", "e não apenas para Iris versicolor?")) success_msg("Excelente trabalho!")
mean() para calcular a largura média da sépala em iris e, em seguida, use uma condição com prefixo versicolor para selecionar apenas quem tem valores acima da média.Informe a largura média da sépala para todas as Iris virginica que têm comprimento de pétala menor que 5 centímetros.
# Fique à vontade para resolver como preferir!
# Armazene os dados de virginica em um objeto chamado virginica
virginica <- iris[iris$Species == "virginica", ]
# Largura média da sépala para Iris virginica com comprimento de pétala menor que 5
mean(virginica[virginica$Petal.Length < 5, ]$Sepal.Width)
test_output_contains('2.8',
incorrect_msg = "Incorreto! Este é difícil mesmo!")
success_msg("Excelente!")
Petal.Length é menor que 5. Você pode calcular a média com a função mean().Quer aprender mais maneiras de extrair insights dos seus dados? Confira estes cursos na DataCamp!
Dê uma olhada no nosso tutorial Merging Datasets in R.
