在 R 中绘制 moving/rolling 模态

Plotting moving/rolling modal in R

我有一组包含多个案例的数据。每个案例都有不同数量的观察结果。如何计算移动模态并绘制移动模态?我目前的想法是创建滞后和领先的数据帧,然后使用 rowModes() 和 base R 来计算行模式,但我不确定我将如何绘制它。

例如,如果我想从下面的数据中获取a的7天移动模态,我该如何计算移动模态并将其绘制在a的图形上y 轴和 b 作为 x 轴上的日期?

a <- c(43,82,38,13,54,74,23,73,16,82,10,1,48,93,57,23,23,86,63,23,24,25,26,65,17,23,36,16,90,68,66)
b <- seq(as.Date("2010-12-01"), as.Date("2010-12-31"), by = "days")
testDF <- data.frame(a,b)

您可以使用 zoo 包中提供的滚动函数。如果你想在第 7 位输出 1-7 个值,在第 8 位输出 2-8 个值等等,你可以使用 :

library(zoo)

testDF$c <- as.numeric(rollapplyr(testDF$a, 7, function(x) {
  tab <- sort(table(x), decreasing = TRUE)
  if(length(unique(tab)) == 1) mean(x)
  else names(tab)[1]
}, fill = NA))

如果你想在第一位输出 1-7 个值,在第二位输出 2-8 个值,依此类推,你可以使用:

testDF$c <- as.numeric(rollapply(testDF$a, 7, function(x) {
  tab <- sort(table(x), decreasing = TRUE)
  if(length(unique(tab)) == 1) mean(x)
  else names(tab)[1]
}, fill = NA, align = 'left'))