Estou tentando criar uma coluna adicional a partir de uma condicional (IF, IF else) utilizado dentro de uma função criada.
Entretanto, quando tento gerar uma coluna adicional a resposta (print) da primeira linha é copiado para todas as linhas da nova coluna.
Alguém consegue me dar uma força, sou iniciante e estou tentanto resolver esse problema que acredito que vai me auxíliar no entendimento de funções e de condicionais.
1 3 2 3
2 2 3 3
3 3 4 3
4 4 5 3
5 5 6 3
6 6 7 3
7 9 8 3
Warning message:
Problem while computing pontos = pontos_mandante(mandantes_placar, visitante_placar).
i the condition has length > 1 and only the first element
will be used
O problema está no fato de que a sua função só consegue processar 1 jogo por vez, mas você está tentando processar todos juntos. Note o erro: the condition has length > 1 and only the first element will be used. Veja que todas as pontuações são iguais à pontuação do primeiro jogo (já que só o primeiro elemento foi utilizado).
Uma coisa que você pode fazer, sem modificar muito o seu código, é colocar um loop dentro da função pontos_mandante(), assim ela retorna um valor para cada par de placares. Observação importante: não se usa a função print() para retornar o resultado de uma função, o correto é usar return(); é por causa disso que no seu console aparece um número 3 solto.
library(tidyverse)
# Calcular quantos pontos o time mandante recebeu
pontos_mandante <- function(gols_mandante, gols_visitante) {
# Vetor vazio que vai receber os pontos de cada placar
vetor_resultados <- c()
# Para cada placar...
for (i in seq_along(gols_mandante)) {
# Aumentar o vetor de resultados com a pontuação do placar atual
if (gols_mandante[i] > gols_visitante[i]) {
vetor_resultados <- append(vetor_resultados, 3)
} else if (gols_mandante[i] < gols_visitante[i]) {
vetor_resultados <- append(vetor_resultados, 0)
} else {
vetor_resultados <- append(vetor_resultados, 1)
}
}
# Retornar
return(vetor_resultados)
}
# Tabela exemplo
pontos_t <- tibble::tibble(
mandantes_placar = c(3, 2, 3, 4, 5, 6, 9),
visitante_placar = c(2, 3, 4, 5, 6, 7, 8)
)
# Criar uma coluna com os pontos do time mandante
pontos_t %>%
mutate(pontos = pontos_mandante(mandantes_placar, visitante_placar))
#> # A tibble: 7 × 3
#> mandantes_placar visitante_placar pontos
#> <dbl> <dbl> <dbl>
#> 1 3 2 3
#> 2 2 3 0
#> 3 3 4 0
#> 4 4 5 0
#> 5 5 6 0
#> 6 6 7 0
#> 7 9 8 3