Коэффициент переупорядочения не работает для сгруппированных данных - PullRequest
0 голосов
/ 10 декабря 2018

У меня есть этот фрейм данных, который я называю top_mesh_terms

structure(list(topic = c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 
1L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L, 2L), term = c("Diabetes Mellitus", 
"Depression", "Syndrome", "Diabetes Mellitus, Type 2", "Lung Diseases", 
"Colorectal Neoplasms", "Osteoarthritis", "Sclerosis", "Lymphoma", 
"Lung Diseases, Obstructive", "Diabetes Mellitus", "Disease", 
"Hypertension", "Syndrome", "Carcinoma", "Infection", "Coronary Disease", 
"Lung Neoplasms", "Obesity", "Infarction"), beta = c(0.0196989252285569, 
0.018472562347772, 0.0175512616261399, 0.0146680780420432, 0.0133507951269683, 
0.01224603797061, 0.0116799262133244, 0.0107893497000735, 0.00926496950657875, 
0.00891926541108836, 0.0324598963852768, 0.0198135918084849, 
0.0162689075944415, 0.0157166860189554, 0.014855885836076, 0.0127365678034364, 
0.0109544570325732, 0.00964124158432716, 0.00956596829604797, 
0.00880281359338067)), class = c("tbl_df", "tbl", "data.frame"
), row.names = c(NA, -20L))

Как следует из заголовка, я бы хотел изменить порядок столбцов term на beta и затем нарисовать гистограмму.Я надеялся увидеть гистограмму с упорядоченными барами, но это не так.Вот код, который я использовал, и полученный график:

top_mesh_terms %>% 
  group_by(topic) %>% 
  mutate(term = fct_reorder(term, beta)) %>%
  ungroup() %>% 
  ggplot(aes(term, beta)) +
  geom_bar(stat = "identity") +
  facet_wrap(~ topic, scales = "free") +
  coord_flip() +
  scale_y_continuous(labels = scales::percent_format()) +
  labs(x = "MeSH Term",
       y = "Beta")

enter image description here

Ответы [ 2 ]

0 голосов
/ 10 декабря 2018

Ваша проблема - group_by.Уровни фактора имеют один порядок, он не может отличаться в зависимости от группы.Если мы избавимся от ваших команд group_by и ungroup, все будет работать:

    top_mesh_terms %>% 
      mutate(term = reorder(term, beta)) %>%
      ggplot(aes(term, beta)) +
      geom_bar(stat = "identity") +
      facet_wrap(~ topic, scales = "free") +
      coord_flip() +
      scale_y_continuous(labels = scales::percent_format()) +
      labs(x = "MeSH Term",
           y = "Beta")

enter image description here

(Кстати, forcats имеет некоторыедействительно хорошие функции, но если вам нужна только fct_reorder, вы также можете использовать base::reorder - она ​​делает то же самое без дополнительной зависимости от пакета.)

0 голосов
/ 10 декабря 2018

Как насчет этого?

top_mesh_terms %>% 
  group_by(topic) %>% 
  mutate(term = fct_reorder(term, beta)) %>%
  ungroup() %>% 
  ggplot(aes(reorder(term, beta), beta)) +
  geom_bar(stat = "identity") +
  facet_wrap(~ topic, scales = "free") +
  coord_flip() +
  scale_y_continuous(labels = scales::percent_format()) +
  labs(x = "MeSH Term",
       y = "Beta")

Я использовал ggplot(aes(reorder(term, beta), чтобы изменить порядок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...