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.

Rachid Muleia
Rachid Muleia
Biostatistician (PhD)