Menu
Coddy logo textTech

Funções Personalizadas

Lição 14 de 14 do curso Manipulação de Dados em R da Coddy.

Funções personalizadas em R são ferramentas poderosas para criar código reutilizável e realizar transformações de dados complexas. Elas permitem encapsular uma série de operações em uma única unidade chamável. Vamos explorar como criar e usar funções personalizadas para tarefas de manipulação de dados.

Estrutura Básica de uma Função Personalizada

A sintaxe básica para criar uma função personalizada em R é:

function_name <- function(arg1, arg2, ...) {
  # Corpo da função
  # Operações usando arg1, arg2, etc.
  return(result)
}

Criando uma Função Personalizada Simples

Vamos criar uma função simples que calcula a porcentagem de valores ausentes em um vetor:

percent_missing <- function(x) {
  sum(is.na(x)) / length(x) * 100
}

# Uso
data <- c(1, 2, NA, 4, NA, 6)
percent_missing(data)  # Retorna: 33.33333

Funções com Múltiplos Argumentos

Funções personalizadas podem receber múltiplos argumentos, permitindo operações mais flexíveis:

scale_column <- function(df, column_name, min_val = 0, max_val = 1) {
  df[[column_name]] <- (df[[column_name]] - min(df[[column_name]], na.rm = TRUE)) / 
                       (max(df[[column_name]], na.rm = TRUE) - min(df[[column_name]], na.rm = TRUE))
  df[[column_name]] <- df[[column_name]] * (max_val - min_val) + min_val
  return(df)
}

# Uso
df <- data.frame(x = 1:10, y = 11:20)
scaled_df <- scale_column(df, "x", 0, 100)

Retornando Múltiplos Valores

Funções podem retornar múltiplos valores usando uma lista:

summarize_numeric <- function(x) {
  list(
    mean = mean(x, na.rm = TRUE),
    median = median(x, na.rm = TRUE),
    sd = sd(x, na.rm = TRUE)
  )
}

# Uso
numbers <- c(1, 2, 3, 4, 5)
summary_stats <- summarize_numeric(numbers)

Usando Funções Personalizadas com dplyr

Funções personalizadas podem ser particularmente úteis quando combinadas com o dplyr para manipulação de dados:

library(dplyr)

categorize_age <- function(age) {
  case_when(
    age < 18 ~ "Child",
    age < 65 ~ "Adult",
    TRUE ~ "Senior"
  )
}

# Uso com dplyr
df <- data.frame(name = c("Alice", "Bob", "Charlie"), age = c(25, 72, 16))
df %>%
  mutate(age_category = categorize_age(age))
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

challenge icon

Desafio

Médio

Crie uma função personalizada chamada mean_score que calcula a pontuação média de cada aluno em um conjunto de dados de pontuações de exames de estudantes.

Para calcular a pontuação média em cada linha, usaremos a função rowwise() e, posteriormente, usaremos ungroup() para retornar tudo ao estado original. Verifique o código fornecido.

Execute as seguintes ações:

  1. Crie uma nova coluna chamada student_mean que contenha a pontuação média.
  2. Crie uma nova coluna chamada is_above_mean que contenha TRUE ou FALSE se o aluno estiver acima ou abaixo da média.
  3. Crie uma coluna chamada rank que contenha a posição de cada aluno em relação aos outros com base em sua média. Por exemplo, 1 significa que o aluno é o melhor, 2 significa que o aluno é o segundo melhor, etc.
    • Para encontrar a classificação, use order(): order(order(mean_col, decreasing = TRUE))

Experimente você mesmo

# Ler a entrada
con <- file("stdin", "r")
input_data <- readLines(con)
close(con)

# Processar os dados de entrada em um data frame
data <- read.csv(text = input_data, header = TRUE, stringsAsFactors = FALSE)

# Definir a função mean_score
mean_score <- function(data) {
  # TODO: Escreva seu código aqui
  # calcular a média de todas as matérias

  return(result)
}

# TODOL Escreva seu código aqui
# Criar uma nova coluna chamada student_mean que contenha a pontuação média.
# Criar uma nova coluna chamada is_above_mean que contenha TRUE ou FALSE se o aluno estiver acima ou abaixo da média.
# Criar uma coluna chamada rank que contenha a posição de cada aluno em relação aos outros com base em sua média. Por exemplo, 1 significa que o aluno é o melhor, 2 significa que o aluno é o segundo melhor, etc.

# Imprimir o resultado
print(data)

Todas as lições de Manipulação de Dados em R