R语言 如何将时间序列“行式”数据转换为长格式以绘制多个折线图?

42fyovps  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(126)

我的数据具有以下结构:

Trial        1        2        3        4        5        6        7        8        9
1    x1 69824.35 67628.96 67976.71 68263.39 68500.94 68698.74 68864.20 69003.20 69120.43
2    x2 69824.35 67628.96 67991.52 68290.91 68538.68 68744.19 68915.02 69057.35 69176.19
3    x3 69824.35 67628.96 67973.59 68258.04 68494.10 68691.00 68856.02 68994.91 69112.27
4    x4 69824.35 67628.96 67939.18 68205.13 68433.12 68628.56 68796.14 68939.84 69063.11
5    x5 69824.35 67628.96 67983.88 68278.10 68522.57 68726.19 68896.15 69038.34 69157.55
6    x6 69824.35 67628.96 67955.75 68231.44 68464.40 68661.55 68828.66 68970.55 69091.22

我想使用ggplot绘制多条线。
为了达到这个目的,我知道我需要得到long格式的数据,我以前使用reshape包和melt函数,但是,我的数据现在是不同的形式,通常“x1”是列变量(没有1:9)。
然而,现在我有了按行的数据,因此我需要一个如下的转换:

Trial        1        
1    x1 69824.35 
2    x1 67628.96 
3    x1 67976.71 
4    x1 68263.39 
5    x1 68500.94 
6    x1 68698.74

我确信这是一个更琐碎的计算,但是,我可能使用了错误的关键字,因为我没有通过搜索找到任何有用的东西。
有谁能给予我点提示吗?
会非常感激。

baubqpgj

baubqpgj1#

您可以使用{tidyr}中的pivot_longer()将数据更改为长格式:

# read in data
dat = structure(list(Trial = c("x1", "x2", "x3", "x4", "x5", "x6"), 
                     `1` = c(69824.35, 69824.35, 69824.35, 69824.35, 69824.35, 
                             69824.35), `2` = c(67628.96, 67628.96, 67628.96, 67628.96, 
                                                67628.96, 67628.96), `3` = c(67976.71, 67991.52, 67973.59, 
                                                                             67939.18, 67983.88, 67955.75), `4` = c(68263.39, 68290.91, 
                                                                                                                    68258.04, 68205.13, 68278.1, 68231.44), `5` = c(68500.94, 
                                                                                                                                                                    68538.68, 68494.1, 68433.12, 68522.57, 68464.4), `6` = c(68698.74, 
                                                                                                                                                                                                                             68744.19, 68691, 68628.56, 68726.19, 68661.55), `7` = c(68864.2, 
                                                                                                                                                                                                                                                                                     68915.02, 68856.02, 68796.14, 68896.15, 68828.66), `8` = c(69003.2, 
                                                                                                                                                                                                                                                                                                                                                69057.35, 68994.91, 68939.84, 69038.34, 68970.55), `9` = c(69120.43, 
                                                                                                                                                                                                                                                                                                                                                                                                           69176.19, 69112.27, 69063.11, 69157.55, 69091.22)), row.names = c(NA, 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                             -6L), class = c("tbl_df", "tbl", "data.frame"))

# pivot longer
transform_dat = dat |> 
  pivot_longer(-Trial)

# plot lines for each trial in different colour
transform_dat |> 
  ggplot(aes(x = as.numeric(name), y = value, colour = Trial)) +
  geom_line()

这样就形成了这样的图

相关问题