在 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'))
我有一组包含多个案例的数据。每个案例都有不同数量的观察结果。如何计算移动模态并绘制移动模态?我目前的想法是创建滞后和领先的数据帧,然后使用 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'))