[英]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 结果。
为了在DF
和DF2
中有匹配的名称,我更改了发布的数据。
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.