Cálculo da moda em dados multimodal

O código abaixo calcula a moda em dados multimodal, a dúvida é, como transformar o código abaixo utilizando pipe?

d1 <- c(1,2,3,5,5,6,6)
d2 <- table(d1)
d3 <- as.matrix(d2)
d4 <- subset(d3,d3[,1]==max(d3[,1]))
d4

Olá Pedro,
encontrei uma forma de fazer, mas precisei trocar algumas funções, como a função as.matrix por exemplo.

Ficaria assim:

d4 <- c(1,2,3,5,5,6,6) %>% 
      table %>% 
      as.data.frame() %>% 
      rename("Obs" = ".") %>% 
      filter(Freq == max(Freq))

d4

Espero ter ajudado! :grinning:

2 curtidas

Ajudou sim, tenho outra situação que agarrou aqui, se eu tiver um data frame como este:
data.frame(x = c(1,1,2,2,3,4,5), y = c(2,3,4,4,5,5,5))
a coluna x é bimodal, com moda 1 e 2 e a coluna y tem moda 5, tentei utilizar um lapply mas sem sucesso, talvez o purrr resolvesse, alguma sugestão para encontrar a moda nas colunas?

Usando o lapply, você pode definir a função que calcula a moda e usar da seguinte forma:

dados <- data.frame(x = c(1,1,2,2,3,4,5),
y = c(2,3,4,4,5,5,5))

Modes <- function(x) {
ux <- unique(x)
tab <- tabulate(match(x, ux))
ux[tab == max(tab)]
}

resultado <- lapply(dados, Modes)
resultado %>% unlist()

1 curtida