首页 > 解决方案 > R时间序列数据:绘制多个批次

问题描述

我有一个大的时间序列数据集,如下表所示。T0、T1、T2、...(一直持续到 T70)是时间戳和超过 400 个批次(A、B、C、...)。我有兴趣绘制的数据中有多个特征(示例数据中的描述列)。我的第一次尝试是为每个描述分离数据集,以便在从 T0 到 T70 的每个子集中每批次得到一行。

在此处输入图像描述

我的目标是将此数据框转换为时间序列对象并检查好批次和坏批次(针对每个描述)的季节性。有人可以帮助解决 R 中的任何简单问题吗?谢谢!

更新:我的一个描述的数据子集如下所示: 在此处输入图像描述

为了融化数据,我使用了: mdf <- melt(df,id.vars = c('Batch',colnames(df[, c(2:70)]))) 但它不起作用。我只想从中得到三个变量:批次 - 时间 - 价值。任何帮助,将不胜感激!

编辑:dput(head(df,20)) 给出了以下输出。我将输出截断到 T20 而不是 T70。

structure(list(Batch = c("A", "B", "C", 
"D", "E", "F", "G", "H", 
"I", "J", "K", "L", "M", 
"N", "O", "P", "Q", "R", 
"S", "T"), 
T0 = c(5, 6,
4, 2, 6, 3, 4, 6, 4, 1, 6, 5, 4, 5, 6, 5, 6, 5,
5, 6), T1 = c(6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
6, 6, 6, 6, 6, 5, 6, 6), T2 = c(6, 6, 6, 6, 6, 6,
6, 6, 6, 6, 6, 6, 6, 6, 5, 6, 6, 6, 6, 6), T3 = c(20,
19, 19, 19, 19, 18, 20, 20, 20, 20, 20, 20, 20, 19,
18, 19, 20, 20, 20, 19), T4 = c(21, 21, 21, 21, 20,
20, 21, 21, 21, 21, 22, 21, 22, 21, 21, 21, 22, 21,
22, 20), T5 = c(22, 22, 22, 22, 22, 21, 21, 22, 21,
22, 23, 22, 23, 22, 22, 23, 23, 23, 23, 22), T6 = c(23,
23, 24, 23, 23, 23, 23, 23, 23, 24, 24, 23, 23, 24,
23, 24, 24, 24, 24, 23), T7 = c(25, 25, 25, 24, 24,
24, 24, 25, 25, 25, 24, 25, 24, 25, 25, 26, 25, 25,
25, 25), T8 = c(26, 26, 25, 26, 25, 26, 26, 26, 26,
26, 25, 26, 26, 26, 26, 26, 25, 26, 25, 26), T9 = c(20,
23, 19, 21, 22, 27, 24, 26, 24, 25, 21, 23, 21, 22,
28, 22, 20, 24, 19, 27), T10 = c(16, 18, 14, 15, 15,
23, 19, 20, 19, 20, 15, 16, 15, 17, 23, 16, 15, 18,
15, 23), T11 = c(15, 16, 15, 15, 16, 17, 15, 14, 15,
15, 15, 14, 15, 15, 17, 15, 15, 15, 15, 17), T12 = c(15,
16, 15, 15, 16, 14, 17, 15, 15, 15, 15, 15, 15, 16,
15, 15, 15, 16, 15, 15), T13 = c(15, 16, 15, 15, 16,
15, 15, 15, 15, 15, 15, 15, 15, 16, 15, 15, 15, 16,
14, 15), T14 = c(16, 16, 15, 16, 16, 15, 16, 15, 16,
15, 15, 15, 15, 16, 16, 15, 16, 16, 15, 16), T15 = c(16,
16, 16, 16, 17, 15, 16, 15, 16, 15, 16, 15, 16, 16,
16, 16, 16, 16, 15, 16), T16 = c(16, 17, 16, 16, 17,
15, 17, 15, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,
15, 16), T17 = c(17, 19, 17, 18, 20, 15, 18, 15, 16,
16, 18, 16, 18, 19, 19, 17, 19, 17, 17, 17), T18 = c(24,
26, 27, 26, 28, 22, 25, 20, 25, 20, 26, 25, 27, 26,
25, 25, 28, 25, 27, 24), T19 = c(36, 37, 36, 38, 36,
38, 37, 31, 36, 26, 36, 37, 36, 36, 37, 36, 37, 35,
35, 35), T20 = c(38, 39, 37, 38, 38, 43, 39, 41, 39,
40, 38, 39, 38, 39, 43, 38, 37, 39, 37, 42)), row.names = c(NA, 
20L), class = "data.frame")

标签: rtime-series

解决方案


只要您没有可重复练习问题的数据,我就会添加一些虚拟数据。对于未来的问题dput(),您的数据并粘贴您的问题。您的问题可以解决融化您的数据。在此方法中,您可以使用函数melt()reshape2您选择要作为 id 的变量,并将其余变量制作成行,并在关键变量中引用。接下来,我应用该方法并构建一些与您想要的相关的图:

library(reshape2)
library(ggplot2)
#Data
df <- data.frame(Batch=rep(c('A','B','C'),2),
                 Type=c('Good','Bad','Good','Good','Bad','Good'),
                 Description=c(rep('In',3),rep(c('Out'),3)),
                 T0=c(1,2,1,4,3,2),
                 T1=c(2,3,4,1,3,4),
                 T2=c(3,5,3,5,5,6),stringsAsFactors = F)
#Melt
mdf <- melt(df,id.vars = c('Batch','Type','Description'))
#Plot for description
ggplot(mdf,aes(x=Description,y=value,fill=variable))+
  geom_bar(stat='identity')
 

使用描述x-axis你会得到这个:

在此处输入图像描述

您也可以使用一些变量包装以获得不同的图,例如facet_wrap()

#Wrap by description
ggplot(mdf,aes(x=Batch,y=value,fill=variable))+
  geom_bar(stat='identity')+
  facet_wrap(.~Description)

在此处输入图像描述

使用融化的数据mdf,您可以播放并获得您想要的其他情节。

更新:根据提供的数据,这里可能解决您的问题:

library(tidyverse)
#Data
dff <- structure(list(Batch = c("A", "B", "C", "D", "E", "F", "G", "H", 
"I", "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T"), 
    T0 = c(5, 6, 4, 2, 6, 3, 4, 6, 4, 1, 6, 5, 4, 5, 6, 5, 6, 
    5, 5, 6), T1 = c(6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 
    6, 6, 6, 5, 6, 6), T2 = c(6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 
    6, 6, 6, 5, 6, 6, 6, 6, 6), T3 = c(20, 19, 19, 19, 19, 18, 
    20, 20, 20, 20, 20, 20, 20, 19, 18, 19, 20, 20, 20, 19), 
    T4 = c(21, 21, 21, 21, 20, 20, 21, 21, 21, 21, 22, 21, 22, 
    21, 21, 21, 22, 21, 22, 20), T5 = c(22, 22, 22, 22, 22, 21, 
    21, 22, 21, 22, 23, 22, 23, 22, 22, 23, 23, 23, 23, 22), 
    T6 = c(23, 23, 24, 23, 23, 23, 23, 23, 23, 24, 24, 23, 23, 
    24, 23, 24, 24, 24, 24, 23), T7 = c(25, 25, 25, 24, 24, 24, 
    24, 25, 25, 25, 24, 25, 24, 25, 25, 26, 25, 25, 25, 25), 
    T8 = c(26, 26, 25, 26, 25, 26, 26, 26, 26, 26, 25, 26, 26, 
    26, 26, 26, 25, 26, 25, 26), T9 = c(20, 23, 19, 21, 22, 27, 
    24, 26, 24, 25, 21, 23, 21, 22, 28, 22, 20, 24, 19, 27), 
    T10 = c(16, 18, 14, 15, 15, 23, 19, 20, 19, 20, 15, 16, 15, 
    17, 23, 16, 15, 18, 15, 23), T11 = c(15, 16, 15, 15, 16, 
    17, 15, 14, 15, 15, 15, 14, 15, 15, 17, 15, 15, 15, 15, 17
    ), T12 = c(15, 16, 15, 15, 16, 14, 17, 15, 15, 15, 15, 15, 
    15, 16, 15, 15, 15, 16, 15, 15), T13 = c(15, 16, 15, 15, 
    16, 15, 15, 15, 15, 15, 15, 15, 15, 16, 15, 15, 15, 16, 14, 
    15), T14 = c(16, 16, 15, 16, 16, 15, 16, 15, 16, 15, 15, 
    15, 15, 16, 16, 15, 16, 16, 15, 16), T15 = c(16, 16, 16, 
    16, 17, 15, 16, 15, 16, 15, 16, 15, 16, 16, 16, 16, 16, 16, 
    15, 16), T16 = c(16, 17, 16, 16, 17, 15, 17, 15, 16, 16, 
    16, 16, 16, 16, 16, 16, 16, 16, 15, 16), T17 = c(17, 19, 
    17, 18, 20, 15, 18, 15, 16, 16, 18, 16, 18, 19, 19, 17, 19, 
    17, 17, 17), T18 = c(24, 26, 27, 26, 28, 22, 25, 20, 25, 
    20, 26, 25, 27, 26, 25, 25, 28, 25, 27, 24), T19 = c(36, 
    37, 36, 38, 36, 38, 37, 31, 36, 26, 36, 37, 36, 36, 37, 36, 
    37, 35, 35, 35), T20 = c(38, 39, 37, 38, 38, 43, 39, 41, 
    39, 40, 38, 39, 38, 39, 43, 38, 37, 39, 37, 42)), row.names = c(NA, 
-20L), class = "data.frame")

接下来是代码:

#Code
Melted <- pivot_longer(dff,cols = -Batch)
Melted$name <- factor(Melted$name,levels = unique(Melted$name))
#Plot
ggplot(Melted,aes(x=Batch,y=value,color=name,group=name))+geom_line()

在此处输入图像描述


推荐阅读