R tips-função pick()
A função pick() da livraria dplyr
O processo de tratamento e manipulação de dados é uma das etapas que mais tempo consome durante a análise de dados. Então, é importante conhecer alguma funções que possam tornar essa jornada um pouco mais leve.
Hoje, eu trago a função pick(), que parece ser irrelevante, pois ela faz algo similar ao que a função select() da livraria dplyr faz. No entanto, durante o processo de tratamento de dados, uma das coisas que pretente-se evitar é perder muito tempo, e ter um codigo mais compacto.
Para percebermos melhor como podemos usar a função pick() vamos gerar uma base de dados com notas de teste para um certo grupo de estudantes.
notas_df <- data.frame(nomes = c("Joa0", "Antonia", "Jorge", "Maria","Joana"),
teste1 = runif(5,0, 20),
teste2 = runif(5,0,20),
teste3 = runif(5,0,20))
head(notas_df)
## nomes teste1 teste2 teste3
## 1 Joa0 0.5346728 10.618107 19.553565
## 2 Antonia 14.1253636 2.638504 14.711865
## 3 Jorge 4.7794320 10.207770 16.887511
## 4 Maria 13.9682634 19.178361 10.044055
## 5 Joana 19.1960866 1.623960 6.949466
Suponha que pretenda calcular a média dos testes de cada estudante e adicioná‑la ao dataset notas_df. Este exercício pode ser realizado de várias formas. Primeiro, vamos tentar resolver o problema usando apenas o base R.
notas_df$media <- rowMeans(notas_df[, c("teste1","teste2","teste3")])
head(notas_df)
## nomes teste1 teste2 teste3 media
## 1 Joa0 0.5346728 10.618107 19.553565 10.235448
## 2 Antonia 14.1253636 2.638504 14.711865 10.491911
## 3 Jorge 4.7794320 10.207770 16.887511 10.624905
## 4 Maria 13.9682634 19.178361 10.044055 14.396893
## 5 Joana 19.1960866 1.623960 6.949466 9.256504
Observe que, no código anterior, tivemos de criar a variável media, à qual atribuimos a média calculada através da função rowMeans(), que permite calcular a média na horizontal, isto é, linha a linha. No entanto, se você aprecia as funções da livraria dplyr, em especial a função mutate(), que permite criar ou adicionar novas variáveis, pode muito bem usar a função pick().
library(dplyr)
notas_df <- notas_df |>
mutate(
media_alter = rowMeans(pick(teste1,teste2,teste3))
)
head(notas_df)
## nomes teste1 teste2 teste3 media media_alter
## 1 Joa0 0.5346728 10.618107 19.553565 10.235448 10.235448
## 2 Antonia 14.1253636 2.638504 14.711865 10.491911 10.491911
## 3 Jorge 4.7794320 10.207770 16.887511 10.624905 10.624905
## 4 Maria 13.9682634 19.178361 10.044055 14.396893 14.396893
## 5 Joana 19.1960866 1.623960 6.949466 9.256504 9.256504
Repare que, na verdade, a função pick() cria um subconjunto que contém as variáveis teste1, teste2 e teste3, e tudo isso é feito dentro da função mutate() sem precisar referenciar o data frame, isto é, sem escrever notas_df$teste1.
Uma das coisas que aprecio nas funções da livraria dplyr é a possibilidade de usar o data masking, que permite aceder às variáveis diretamente, sem referenciar a base de dados ou usar aspas.