Pular para o conteúdo principal

Subsetting de conjuntos de dados em R

Fazer subsetting de dados é uma habilidade essencial para qualquer profissional de dados. Aprenda e pratique subsetting neste tutorial interativo rápido!
Atualizado 17 de set. de 2026  · 6 min lido

Explorar com IA

ChatGPTClaudePerplexity

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.")
Use 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!")
Use a função 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!")
Primeiro, tente selecionar todas as Iris virginica e depois filtrar onde 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.")
Use 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!")
Use a função 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!")
Primeiro, tente selecionar todas as Iris virginica e depois filtrar onde 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.

Tópicos
R
Ciência de dados

Saiba mais sobre R

Curso

Manipulação de dados com o dplyr

4 h
173.9K
Desenvolva habilidades no Tidyverse aprendendo a transformar e manipular dados com o dplyr.
Ver detalhesRight Arrow
Iniciar Curso
Ver maisRight Arrow
Relacionado

Tutorial

Criação de uma lista no R

Pratique Listas em R usando o material do curso Intro to R do DataCamp.
Ryan Sheehy's photo

Ryan Sheehy

3 min

Tutorial

Tutorial de regressão linear no R

Neste tutorial, você aprenderá os fundamentos de um modelo estatístico muito popular: a regressão linear.

Eladio Montero Porras

15 min

Tutorial

Tutorial do K-Means Clustering no R

Saiba o que é o k-means e descubra por que ele é um dos algoritmos de agrupamento mais usados na ciência de dados
Eugenia Anello's photo

Eugenia Anello

8 min

Tutorial

Como fazer um histograma ggplot2 no R

Aprenda a criar um histograma ggplot2 no R. Crie histogramas no R com base na gramática dos gráficos.

Kevin Babitz

15 min

Tutorial

Tutorial de Pipes em R para iniciantes

Saiba mais sobre o famoso operador de pipe %>% e outros pipes no R, por que e como você deve usá-los e quais alternativas você pode considerar!
Karlijn Willems's photo

Karlijn Willems

15 min

Tutorial

Pacotes R: Um tutorial para iniciantes

Uma introdução aos pacotes do R com base em 11 das perguntas mais frequentes dos usuários.
DataCamp Team's photo

DataCamp Team

15 min

Ver MaisVer Mais