繁体   English   中英

R 创建多个时间序列线图,按单独的数据集分组

[英]R Create multiple time series line graphs, grouped by a separate dataset

我有一个这样的数据集,我使用时间序列聚类将其变成了一个巨大的树状图:

DF<-structure(list(`Smith, Sumner` = c(" 0", " 0", " 0", " 0", " 0", 
                                    " 0", " 0", " 0", " 0", " 0", " 0", " 0", " 0", " 0", " 0", " 0", 
                                    "  0", "  0", "  0", "  0", "  0", "  0", "  0", "  0", "  0", 
                                    "  0", "  0", "  1", "  1", "  1", "  1", "  2", "  3", "  7", 
                                    " 15", " 22", " 25", " 31", " 32", " 40", " 41", " 45", " 47", 
                                    " 48", " 48", " 49", " 49", " 49", " 49", " 49", " 49"), `Fizzle III, Joseph` = c(" 0", " 0", " 0", " 0", " 0", " 0", " 0", " 0", " 0", " 0", " 0", " 0", 
                                                                                                                     " 0", " 0", " 0", " 0", "  0", "  0", "  0", "  0", "  0", "  0", 
                                                                                                                     "  0", "  0", "  0", "  0", "  0", "  0", "  0", "  0", "  0", 
                                                                                                                     "  5", "  6", "  7", "  9", "  9", " 11", " 21", " 25", " 33", 
                                                                                                                     " 38", " 44", " 51", " 54", " 57", " 60", " 61", " 67", " 72", 
                                                                                                                     " 73", " 73"), `johnson, Barry` = c(" 0", " 0", " 0", " 0", " 0", 
                                                                                                                                                      " 0", " 0", " 0", " 0", " 0", " 0", " 0", " 0", " 0", " 0", " 0", 
                                                                                                                                                      "  0", "  0", "  0", "  0", "  0", "  0", "  0", "  0", "  0", 
                                                                                                                                                      "  0", "  0", "  0", "  0", "  0", "  0", "  1", "  5", "  7", 
                                                                                                                                                      " 11", " 12", " 17", " 20", " 21", " 24", " 25", " 28", " 28", 
                                                                                                                                                      " 28", " 28", " 28", " 31", " 31", " 33", " 33", " 33"), `peanut, Mark` = c(" 0", 
                                                                                                                                                                                                                                   " 0", " 0", " 0", " 0", " 0", " 0", " 1", " 2", " 5", "10", "18", 
                                                                                                                                                                                                                                   "22", "23", "27", "28", " 30", " 34", " 42", " 44", " 48", " 51", 
                                                                                                                                                                                                                                   " 62", " 64", " 65", " 66", " 67", " 68", " 73", " 75", " 76", 
                                                                                                                                                                                                                                   " 81", " 86", " 89", " 89", " 92", " 94", "102", "111", "118", 
                                                                                                                                                                                                                                   "133", "141", "146", "157", "158", "158", "158", "158", "158", 
                                                                                                                                                                                                                                   "158", "158"), `alpha, John A` = c(" 0", " 0", " 0", " 0", 
                                                                                                                                                                                                                                                                        " 0", " 0", " 0", " 0", " 0", " 0", " 0", " 0", " 0", " 0", " 0", 
                                                                                                                                                                                                                                                                        " 0", "  0", "  0", "  0", "  0", "  0", "  0", "  0", "  0", 
                                                                                                                                                                                                                                                                        "  0", "  0", "  6", " 11", " 13", " 15", " 17", " 20", " 31", 
                                                                                                                                                                                                                                                                        " 35", " 41", " 46", " 53", " 59", " 69", " 87", " 91", " 93", 
                                                                                                                                                                                                                                                                        "103", "127", "133", "133", "133", "133", "133", "133", "133"
                                                                                                                                                                                                                                   ), `barry, Lloyd Alan` = c(" 0", " 0", " 0", " 1", " 2", " 2", 
                                                                                                                                                                                                                                                                " 3", " 3", " 3", " 3", " 3", " 5", " 7", "11", "13", "18", " 23", 
                                                                                                                                                                                                                                                                " 23", " 23", " 27", " 28", " 31", " 32", " 32", " 33", " 33", 
                                                                                                                                                                                                                                                                " 33", " 33", " 33", " 33", " 33", " 33", " 33", " 33", " 33", 
                                                                                                                                                                                                                                                                " 33", " 33", " 33", " 33", " 33", " 33", " 33", " 33", " 33", 
                                                                                                                                                                                                                                                                " 33", " 33", " 33", " 33", " 33", " 33", " 33"), `smith, EK` = c(" 0", 
                                                                                                                                                                                                                                                                                                                                    " 0", " 2", " 3", " 3", " 3", " 4", " 6", " 6", " 6", " 6", " 6", 
                                                                                                                                                                                                                                                                                                                                    " 6", " 7", "14", "15", " 18", " 25", " 28", " 29", " 33", " 37", 
                                                                                                                                                                                                                                                                                                                                    " 45", " 49", " 51", " 54", " 61", " 65", " 65", " 70", " 75", 
                                                                                                                                                                                                                                                                                                                                    " 79", " 79", " 81", " 82", " 83", " 87", " 89", " 89", " 91", 
                                                                                                                                                                                                                                                                                                                                    " 91", " 91", " 91", " 93", " 95", " 95", " 98", " 98", " 99", 
                                                                                                                                                                                                                                                                                                                                    "100", "100"), `parvin, Eric David` = c(" 0", " 0", " 0", " 0", 
                                                                                                                                                                                                                                                                                                                                                                            " 0", " 0", " 0", " 0", " 0", " 0", " 0", " 0", " 0", " 0", " 0", 
                                                                                                                                                                                                                                                                                                                                                                            " 0", "  0", "  4", "  6", "  6", "  6", "  6", "  6", "  6", 
                                                                                                                                                                                                                                                                                                                                                                            "  6", "  6", "  6", "  6", "  6", "  6", "  7", "  7", "  9", 
                                                                                                                                                                                                                                                                                                                                                                            " 10", " 10", " 10", " 10", " 10", " 10", " 10", " 10", " 10", 
                                                                                                                                                                                                                                                                                                                                                                            " 10", " 10", " 10", " 10", " 10", " 10", " 10", " 10", " 10"
                                                                                                                                                                                                                                                                                                                                    ), `Burgess, Gary` = c(" 0", " 0", " 0", " 1", " 1", " 1", 
                                                                                                                                                                                                                                                                                                                                                                 " 1", " 1", " 1", " 1", " 1", " 1", " 1", " 1", " 1", " 3", "  5", 
                                                                                                                                                                                                                                                                                                                                                                 "  5", "  5", "  6", "  7", "  7", "  8", "  8", "  8", "  9", 
                                                                                                                                                                                                                                                                                                                                                                 "  9", "  9", "  9", " 11", " 11", " 11", " 11", " 12", " 12", 
                                                                                                                                                                                                                                                                                                                                                                 " 14", " 14", " 15", " 15", " 17", " 17", " 17", " 18", " 18", 
                                                                                                                                                                                                                                                                                                                                                                 " 18", " 18", " 18", " 18", " 18", " 18", " 18"), `smith, john` = c(" 0", 
                                                                                                                                                                                                                                                                                                                                                                                                                                            " 0", " 0", " 0", " 1", " 1", " 3", " 6", " 6", " 6", " 8", " 8", 
                                                                                                                                                                                                                                                                                                                                                                                                                                            " 8", " 8", " 8", " 8", "  8", "  8", "  8", "  9", " 10", " 11", 
                                                                                                                                                                                                                                                                                                                                                                                                                                            " 13", " 14", " 16", " 16", " 17", " 18", " 18", " 19", " 20", 
                                                                                                                                                                                                                                                                                                                                                                                                                                            " 20", " 20", " 21", " 21", " 22", " 22", " 22", " 22", " 22", 
                                                                                                                                                                                                                                                                                                                                                                                                                                            " 22", " 22", " 22", " 22", " 22", " 22", " 22", " 22", " 22", 
                                                                                                                                                                                                                                                                                                                                                                                                                                            " 22", " 22")), row.names = c(NA, -51L), class = c("tbl_df", 
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               "tbl", "data.frame"))

Ps 有人知道为什么当我从 RStudio 复制时它会如此奇怪地粘贴吗? 有巨大的空间?

无论如何,在数据中,每一列都是一个人(名字应该打乱),行代表年份,每年发生一定数量的事件。 我使用时间序列聚类与真实数据集(数百列)来创建将最相似的列组合在一起的树状图。 我可以在如下所示的数据框中访问该分组:

DF2<-structure(list(type_col = c("Smith, Sumner", "josephs, Joseph", 
"smith, Barry", "johnson, Mark", "Peanut, John A", "smithy, Lloyd Alan", 
"john, EK", "Amistad, Eric David", "Hotdog, Gary ", "Jones, SMith"
), cluster_group = c(1L, 2L, 2L, 1L, 3L, 3L, 1L, 1L, 2L, 1L)), row.names = c(NA, 
10L), class = "data.frame")

因此,这向我显示了名称(我很抱歉,这些名称与其他示例数据中显示的名称不完全相同)及其各自的组。

我想做的是 plot 类似这样的东西(忽略“90 年代”和“80 年代”,上面写着 A 或 B,我希望分别是第 1 组或第 2 组) 在此处输入图像描述

我会在哪里取每个相应的组,然后“平均”他们的数据以随着时间的推移为每个组创建一条线。 那有意义吗? 我知道 ggplot 可以使用“分组”变量,而且我也知道多个 geom_lines 可以在一个图表上,但除此之外我完全迷失了。 帮助!

这主要是一个数据重塑问题。 首先将DF 从宽格式转换为长格式,然后与DF2合并,按时间和聚类分组汇总。 最后,plot 结果。

为了在DFDF2中有匹配的名称,我更改了发布的数据。

library(tidyverse)

DF[] <- lapply(DF, function(x) as.numeric(as.character(x)))
names(DF) <- LETTERS[seq_len(ncol(DF))]

DF2$type_col <- LETTERS[seq_len(ncol(DF))]

DF %>%
  rownames_to_column(var = "time") %>%
  mutate(time = as.integer(time)) %>%
  pivot_longer(
    cols = -time,
    names_to = "type_col",
    values_to = "Value"
  ) %>%
  left_join(DF2, by = "type_col") %>%
  mutate(cluster_group = factor(cluster_group)) %>%
  group_by(time, cluster_group) %>%
  summarise(Mean = mean(Value, na.rm = TRUE), .groups = "drop_last") %>%
  ggplot(aes(time, Mean, color = cluster_group)) +
  geom_line()

在此处输入图像描述

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM