#r #dataframe #ggplot2
#r #фрейм данных #ggplot2
Вопрос:
Пожалуйста, посмотрите ниже набор данных, с которым я работаю:
index d1_t1 d1_t2 d1_t3 d1_t4 d2_t1 d2_t2 d2_t3 d2_t4 d3_t1 d3_t2 d3_t3 d3_t4 d4_t1 d4_t2 d4_t3 d4_t4 d5_t1 d5_t2 d5_t3 d5_t4 d6_t1 d6_t2 d6_t3 d6_t4 d7_t1 d7_t2 d7_t3 d7_t4
1 1 1 0 0 0 0 0 0 1 1 1 1 1 0 1 0 1 1 0 1 0 1 0 1 1 1 1 1 1
2 2 1 1 0 1 0 1 0 0 0 1 0 1 0 1 0 0 0 1 0 0 0 0 0 0 1 1 0 0
3 3 1 1 1 0 1 1 0 1 1 0 1 0 1 0 1 1 0 1 1 1 0 1 1 1 1 1 1 1
4 4 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
Краткое объяснение переменных:
d1t1=Day 1 time 1
d1t2=Day 1 time 2
....
d2t1=Day2 time 1
d2t2=Day2 time 2
0,1 = различные типы измерений, выполненных в определенное время.
Я хотел бы создать линейный график с использованием facet, чтобы показать количество измерений в минуту в течение недели. Таким образом, в основном по оси x, чтобы иметь время, по оси y, чтобы иметь наибольшее количество измерений, сделанных в течение недели. Что мне удалось сделать, так это суммировать фрейм данных на основе столбцов, но я не знаю, как это построить.
Пример данных:
df<-structure(list(index=c (101,200,200,101), d1_t1 = c(1, 1, 1, 1),
d1_t2 = c(1, 1, 1, 1),
d1_t3 = c(1, 1, 1, 1),
d1_t4 = c(1, 1, 0, 1),
d2_t1 = c(1, 1, 1, 1),
d2_t2 = c(1, 1, 1, 1),
d2_t3 = c(1, 0, 1 ,1),
d2_t4 =c(1,0,1,1),
d3_t1 = c(1, 1, 1, 1),
d3_t2 = c(1, 1, 1, 1),
d3_t3 = c(1, 1, 1, 1),
d3_t4 = c(1, 0, 1, 1),
d4_t1 = c(1, 1, 1, 1),
d4_t2 = c(1, 1, 1, 1),
d4_t3 = c(1, 1, 1 ,1),
d4_t4 =c(1,1,1,1),
d5_t1 = c(1, 1, 1, 1),
d5_t2 = c(1, 1, 1, 1),
d5_t3 = c(1, 1, 1, 1),
d5_t4 = c(1, 1, 1, 1),
d6_t1 = c(1, 1, 1, 1),
d6_t2 = c(1, 1, 1, 1),
d6_t3 = c(1, 0, 1 ,1),
d6_t4 =c(1,0,1,1),
d7_t1 = c(1, 1, 1, 1),
d7_t2 = c(1, 1, 1, 1),
d7_t3 = c(1, 0, 1 ,1),
d7_t4 =c(1,0,1,1)), row.names = c(NA,4L), class = "data.frame")
df
Комментарии:
1. Итак, вам нужен линейный график для каждого индекса?
2. @Опустите линию (или geom_col), чтобы указать общее значение измерений при ti, t2, t3, t4. Спасибо
3. И этот фасет по индексу? Графики со временем x, значением y и разделением по индексу?
4. @Duck true спасибо за ваше время, фасет предназначен для дней, ось x — это время, а ось y — наибольшее количество измерений, сделанных за неделю. В принципе, я ошибся, используя переменную index
5. Отлично, это сработало и решило вашу проблему! Отлично!
Ответ №1:
Я бы предложил такой подход:
library(tidyverse)
#Melt
df2 <- pivot_longer(df,cols = -index) %>% separate(col = name,sep = '_',into = c('day','time')) %>%
group_by(day,time) %>% summarise(Total=sum(value))
#Plot
ggplot(df2,aes(x=time,y=Total))
geom_bar(stat='identity',color='black',fill='pink')
facet_wrap(.~day,scales = 'free')
Со следующим выводом: