Как отобразить 2 набора данных в одном столбце - PullRequest
0 голосов
/ 21 марта 2019

Итак, я создаю пакет MI, и я хотел включить барплот, который отображает, когда что-то было отправлено, и кто виноват в опоздании. У меня есть 5 столбцов данных, которые можно разделить на две части:

Раздел 1 (время подачи) = до 7 утра, с 7 до 9 утра, после 9 утра

.

Раздел 2 (вина) = нас, их Имеется 6 строк данных (т.е. за предыдущие 6 месяцев).

Нет проблем с чтением данных, манипулированием ими, изменением дат или форматированием. Также нет проблем с созданием столбцов для всего набора данных в стеке или для каждого раздела в стеке (что я и хочу).

То, что я хотел бы, чтобы секция 1 была сгруппированной барплотом, и рядом с ней есть секция 2.

Воссоздается в Excel, если описание не ясно

Это код, который у меня есть. Загрузка и обработка данных в подходящий формат

MIDF <- read.xlsx("C:/MISMM.xlsx", sheet = 11, startRow = 3, colNames = TRUE)
MDATE <- excel_numeric_to_date(MIDF$`Month./.Year`, date_system = "modern", include_time = "false")
MDATE <- format(as.Date(MDATE), "%m-%Y")
MIDF <- cbind(MDATE, MIDF[2:19])
MIDF <- tail(MIDF, 6)

Это все 5 столбцов сложены

LAFU <- MIDF %>% select (9, 10, 11, 12, 13)
LAFUa <- MIDF %>% select(1)
LAFUa <- (t(LAFUa))
LAFU <- (t(LAFU))
LAFUCHART <- barplot(LAFU, 
         names.arg=LAFUa, 
         main = "Lates and who is at fault",
         col=c("#1488CA", "#6B7E87", "#AA0B3C", "#FDC41F",  "#85C9F0"), 
         legend = rownames(LAFU), 
         beside = FALSE)

И эти две секции разделены

LAFUresub <- MIDF %>% select (9, 10, 11)
LAFUerror <- MIDF %>% select (12, 13)
LAFUa <- MIDF %>% select(1)
LAFUa <- (t(LAFUa))
LAFUresub <- (t(LAFUresub))
LAFUerror <- (t(LAFUerror))

 LAFUresubBP <- barplot(LAFUresub, 
    names.arg=LAFUa, 
    main = "Lates",
    col=c("#1488CA", "#6B7E87", "#AA0B3C"), 
    legend = rownames(LAFUresub), 
    beside = FALSE)

 LAFUerrorBP <- barplot(LAFUerror, 
    names.arg=LAFUa, 
    main = "Who is at fault",
    col=c("#FDC41F",  "#85C9F0"), 
    legend = rownames(LAFUerror), 
    beside = FALSE)

и, наконец, моя попытка заставить их воспроизвести картину. Это немного отстойно, но я, честно говоря, понятия не имею, с чего начать.

LAFUTIME <- t(group_by(MIDF %>% select(9,10,11)))
LAFUERROR <- t(group_by(MIDF %>% select(12, 13)))
LAFUDATE <- t(MIDF %>% select(1))
test<-rbind(LAFUTIME, LAFUERROR)
barplot(LAFUTIME %>% LAFUERROR)

любая помощь с благодарностью. David

Вот код для фрейма данных, который сравним с тем, что я использую, если это поможет.

pre7am <- c(1,2,3,2,1,3)
SamNam<- c(2,4,3,6,5,3)
post9am<- c(1,2,1,0,1,0)
us <-     c(0,0,1,3,2,0)
them <-   c(4,8,6,5,5,6)
dates <- c("Jul18", "Aug18", "Sept18", "Oct18", "Nov18", "Dec18")

DF <- data.frame(pre7am, SamNam, post9am, us, them, row.names = dates)

1 Ответ

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

Итак, я использовал следующее, что довольно близко:

library(tidyverse)
library(zoo)

DF %>% 
mutate(Dates = rownames(DF),
Dates = factor(Dates, levels = c("Jul18","Aug18", "Sep18", "Oct18", "Nov18", "Dec18"))) %>% 
gather(vartype, value, -Dates) %>% 
mutate(Subsection =paste("Subsection", abs(as.numeric(grepl("am", vartype)) - 1) + 1)) %>% 
ggplot(aes(Subsection,value, fill = vartype, col = vartype)) + 
geom_col() +
facet_grid(.~Dates) 

Итак, сначала мы перемещаем Dates из имен строк в фактическую переменную. Затем мы проверяем, что Dates на самом деле является упорядоченным множителем (необходим для facet_grids). Затем мы форматируем данные в длинный формат, используя gather. Subsection создается на основе двух типов стеков, которые вы хотите, где мы проверяем, находится ли «am» в vartype (логическое значение), а затем мы создаем функцию, в которой мы создаем Subsection1, если «am» находится в vartype и Subsection2, если «am» отсутствует. Тогда, поскольку у нас есть значения для высоты столбцов, мы используем geom_col. Мы также используем facet_grid, чтобы разбить графики на Dates и организовать соответственно.

...