Dividir seus dados em subconjuntos, ou melhor, escolher apenas as partes que sejam relevantes para o seu trabalho é um importante componente da etapa de pré-processamento dos dados. No decorrer deste post vamos mostrar diversas maneiras de realizar esta tarefa com o R.
Começamos com a criação do data frame que será usado em todos os exemplos. Para quem ainda não está muito familiarizado com o conceito de data frame no R, comece entendendo que eles nada mais são do que objetos utilizados para armazenar tabelas com seus dados. É algo muito parecido com uma tabela do Access do do SQL. E diferença fundamental entre um data frame e uma matriz é que no data frame os dados não precisam de ser todos do mesmo tipo.
Prosseguindo, vamos chamar nosso data frame de x.df, que será composto de 5 variáveis chamadas de V1 até V5. Os valores de cada variável virão de uma distribuição normal com média 0 e desvio padrão 1. Adicionalmente, vamos criar uma variável y contendo inteiros de 1 a 5.
# Cria x e y
x <- matrix(rnorm(30, 1), ncol = 5) y <- c(1, seq(5)) #combina x e y em uma única matriz x x <- cbind(x, y) #converte x em no data frame x.df x.df <- data.frame(x)
#exibe o data frame criado x.df V1 V2 V3 V4 V5 y 1 -1.6862356 1.3950211 1.35898920 1.8492410 1.75368860 1 2 0.8610318 -0.5698281 -0.01984841 0.3570547 -0.93262483 1 3 -1.3736436 0.1280908 0.17866428 1.6930332 0.42080132 2 4 0.7557265 1.8622043 -0.29684582 1.0555782 0.09372863 3 5 0.6296957 1.7943359 2.16226397 0.1604166 0.37218504 4 6 0.4694073 1.3096533 1.90324318 1.9372227 1.43930020 5
Vamos utilizar a função names() para visualizar os atributos do data frame.
names(x.df) [1] "V1" "V2" "V3" "V4" "V5" "y"
Agora, vamos utilizar a função subset() para fazer o primeiro processamento com nossos dados. Vamos criar uma variável chamada x.sub e armazenar todos os valores de x.df que contenham y > 2.
x.sub <- subset(x.df, y > 2) x.sub V1 V2 V3 V4 V5 y 4 0.7557265 1.862204 -0.2968458 1.0555782 0.09372863 3 5 0.6296957 1.794336 2.1622640 0.1604166 0.37218504 4 6 0.4694073 1.309653 1.9032432 1.9372227 1.43930020 5
Vamos deixar nossa seleção um pouco mais complexa, adicionando uma condicional. Vamos selecionar os registros que contenham y > 2 e V1 > 0.6 e armazenar os dados na variável x.sub1.
x.sub1 <- subset(x.df, y > 2 & V1 > 0.6) x.sub1 V1 V2 V3 V4 V5 y 4 0.7557265 1.862204 -0.2968458 1.0555782 0.09372863 3 5 0.6296957 1.794336 2.1622640 0.1604166 0.37218504 4
Repare que em nós retornamos sempre todas as colunas em nossas seleções. Vamos agora realizar uma outra tarefa, retornando apenas os atributos V1 e V4.
x.sub2 <- subset(x.df, y > 2 & V2 > 0.4, select = c(V1, V4))
x.sub2 V1 V4 4 0.7557265 1.0555782 5 0.6296957 0.1604166 6 0.4694073 1.9372227
Vamos criar agora uma terceira partição do nosso data frame, a x.sub3. Nela, vamos selecionar os registros com valores de y maiores do que 3 e todas as colunas entre V2 e V5.
x.sub3 <- subset(x.df, y > 3, select = V2:V5)
x.sub3 V2 V3 V4 V5 5 1.794336 2.162264 0.1604166 0.372185 6 1.309653 1.903243 1.9372227 1.439300
Uma outra forma de realizar uma seleção é utilizando o conceito de índices. Ele se baseia no fato de que você pode selecionar os dados de um data frame chamando o comando nomeDataFrame$nomeAtributo. Vamos selecionar os registros com valores de y iguais a 1.
x.sub4 <- x.df[x.df$y == 1, ]
x.sub4 V1 V2 V3 V4 V5 y 1 -1.6862356 1.395021 1.35898920 1.8492410 1.7536886 1 2 0.8610318 -0.569828 -0.01984841 0.3570547 -0.9326248 1
Agora, realizaremos uma seleção utilizando a notação %in%. Muito parecido com a sintaxe do SQL, ela retorna todos os valores contidos em um determinado vetor. Veja o exemplo abaixo.
x.sub5 <- x.df[x.df$y %in% c(1, 4), ]
x.sub5 V1 V2 V3 V4 V5 y 1 -1.6862356 1.395021 1.35898920 1.8492410 1.7536886 1 2 0.8610318 -0.569828 -0.01984841 0.3570547 -0.9326248 1 5 0.6296957 1.794336 2.16226397 0.1604166 0.3721850 4
Agora, da mesma forma que selecionamos registro baseado no conceito de índice, vamos fazer o mesmo para colunas, selecionando apenas as duas primeiras colunas, V1 e V2 em nossa variável x.sub6. Veja que deixar o primeiro argumento em branco significa retornar todos os registros das colunas selecionadas.
x.sub6 <- x.df[, 1:2]
x.sub6 V1 V2 1 -1.6862356 1.3950211 2 0.8610318 -0.5698281 3 -1.3736436 0.1280908 4 0.7557265 1.8622043 5 0.6296957 1.7943359 6 0.4694073 1.3096533
Este mesmo conceito pode ser utilizado se desejarmos selecionar, por exemplo, apenas a primeira, terceira e quinta variável do nosso data frame x.df.
x.sub7 <- x.df[, c(1, 3, 5)]
x.sub7 V1 V3 V5 1 -1.6862356 1.35898920 1.75368860 2 0.8610318 -0.01984841 -0.93262483 3 -1.3736436 0.17866428 0.42080132 4 0.7557265 -0.29684582 0.09372863 5 0.6296957 2.16226397 0.37218504 6 0.4694073 1.90324318 1.43930020
Naturalmente isto implica em podermos selecionar linhas e colunas baseadas no conceito de índices.
x.sub8 <- x.df[c(1, 3), 3:6]
x.sub8 V3 V4 V5 y 1 1.3589892 1.849241 1.7536886 1 3 0.1786643 1.693033 0.4208013 2
Esta são algumas das formas possíveis de fazer parte do pré-processamento de dados no R.
Um abraço e até o próximo post!
Adaptado de:
Frequently Asked Questions about R. UCLA: Statistical Consulting Group.from http://www.ats.ucla.edu/stat/r/faq/subset_R.htm (accessed November 15, 2014).
0 comentários:
Postar um comentário