Изменить порядок переменной по другой объектной переменной в R - PullRequest
0 голосов
/ 05 августа 2020

У меня есть DF, и я хотел изменить ось Y, упорядочив мои данные по переменной из другого объекта. Я пробовал использовать fct_reorder из forcats, но не получилось.

Мой код:

library(tidyverse)
library(ggridges)
library(zoo)

url <- httr::GET("https://xx9p7hp1p7.execute-api.us-east-1.amazonaws.com/prod/PortalGeral",
                 httr::add_headers("X-Parse-Application-Id" =
                                       "unAFkcaNDeXajurGB7LChj8SgQYS2ptm")) %>%
    httr::content() %>%
    '[['("results") %>%
    '[['(1) %>%
    '[['("arquivo") %>%
    '[['("url")

data <- openxlsx::read.xlsx(url) %>%
    filter(is.na(municipio), is.na(codmun)) %>%
    mutate_at(vars(contains(c("Acumulado", "Novos", "novos"))), ~ as.numeric(.))

data[,8] <- openxlsx::convertToDate(data[,8])

bigger_state <- data %>%
    group_by(estado) %>%
    mutate(diasposdez = 1:n(),
           mm7d = rollmean(casosNovos, 7, fill = NA, allign = "right")) %>%
    filter(data == data[which.max(mm7d)], !is.na(estado)) %>%
    arrange(desc(casosNovos)) %>%
    pull(estado)
         
data %>%
    group_by(estado) %>%
    mutate(height = rollmean(casosNovos, k = 7, align = "right", fill = NA) / sum(casosNovos),
           estado = as_factor(estado)) %>%
    filter(data >= "2020-05-01") %>%
    ggplot(aes(x = data, y = fct_reorder(.f = estado, .x = bigger_state), height = scales::rescale(height))) +
    geom_ridgeline() +
    scale_x_date(date_breaks = "2 weeks",
                 date_labels = "%d/%b/%Y")

Ошибка:

Error in fct_reorder(.f = estado, .x = bigger_state) : 
  length(f) == length(.x) is not TRUE

1 Ответ

1 голос
/ 05 августа 2020

Просто используйте factor(estado, bigger_state) вместо fct_reorder(.f = estado, .x = bigger_state). Вы пытаетесь сопоставить все значения с уровнями факторов, что дает вам ошибку.

image
...