Как переставить несколько столбцов (с помощью dplyr) для граненых гистограмм (созданных с помощью ggplot) в R? - PullRequest
0 голосов
/ 17 марта 2019

У меня есть фрейм данных, аналогичный приведенному ниже.

(В моем исходном фрейме данных у меня есть ps и qs + их доверительные интервалы в дополнение к gs и нам).

df <- read.table(text="
       university      gs  gs.ci.l  gs.ci.u       us  us.ci.l  us.ci.u
1           A        0.90     0.89     0.92     0.08    0.079    0.081
2           B        0.80     0.78     0.82     0.18    0.179    0.181
3           C        0.70     0.69     0.71     0.27    0.269    0.271
4           D        0.60     0.64     0.63     0.30    0.291    0.34", header=T)

[Q1] Я хотел бы переставить свой фрейм данныхс помощью dplyr для создания граненых гистограмм (один фасет на университет, каждый фасет отображает 2 бара (gs + доверительные интервалы [gs.ci.l; gs.ci.u] и us + доверительные интервалы [us.ci.l; us.ci.u])

Каков наилучший способ перестановки фрейма данных для генерации вышеупомянутого вывода? Я попытался с помощью команды collect () принудительно вывести средства и пределы доверия в одни и те же столбцы,соответственно.

[Q2] Кроме того, существует ли элегантный способ упорядочить выходные данные из dplyr :: sumrize ()%>% select () непосредственно в столбцах? В моем примере я хотел бы расположить "gs"and" us "в столбце с именем" mean "," gs.ci.l "и" us.ci.l "в столбце" ci_low "и" gs.ci.u "и" gs.ci.u "в столбце с именем "ci_up" заранее.

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

Решение, подобное @Peter_Evan, с использованием tidyr::gather и tidyr::spread для подготовки данных:

library(tidyverse)
df %>% 
  gather(col, val, gs:us.ci.u) %>% 
  mutate(categ = str_sub(col, end = 2), stat = str_sub(col, start = 4)) %>%
  mutate(stat = if_else(stat == "", "mean", stat)) %>%
  select(-col) %>% 
  spread(stat, val) %>%

  ggplot(aes(categ)) +
  geom_col(aes(y = mean)) +
  geom_errorbar(aes(ymin = ci.l, ymax = ci.u)) +
  facet_wrap(~university, nrow = 1)

enter image description here

0 голосов
/ 17 марта 2019

При переходе на Q1 - я не уверен, что правильно представляю предполагаемый результат. Внизу в парке мячей? ПРИМЕЧАНИЕ: я делаю только минимальное форматирование здесь. Кроме того, в примере есть несколько запутанных и незначительных КИ, что делает часть вывода не имеющей смысла или трудной для чтения. Форматирование поможет в некоторых случаях.

library(tidyverse)

test <- df %>% 
  select(university, mu = gs, ci.l = gs.ci.l,ci.u = gs.ci.u) %>% 
  mutate(label = 'gs') %>% 
  bind_rows(., df %>% 
          select(university, mu = us, ci.l = us.ci.l,ci.u = us.ci.u) %>% 
          mutate(label = 'us'))

test %>% ggplot(., aes(y = mu, x = label)) + 
  geom_bar(stat="identity") +
  geom_errorbar(aes(ymin = ci.l, ymax=ci.u, width =.3)) +
  facet_wrap(~university) +
  theme(axis.text.x = element_text(angle = 45, hjust = 1))

enter image description here

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