【问题标题】:Plotting moving/rolling modal in R在 R 中绘制移动/滚动模式
【发布时间】:2021-03-19 08:22:04
【问题描述】:

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

例如,如果我想从下面的数据中获取a的7天移动模态,我该如何计算移动模态并将其绘制在y轴上a和@的图形上987654324@作为 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)

【问题讨论】:

  • 我在任何地方都看不到基础 R 中的 rowModes() 函数。还有什么是模态?举一个例子,你如何计算它?如果您分享所共享数据的预期输出,会有所帮助吗?
  • @RonakShah 模式只是模式,它是最常出现的数字。在这种情况下,前 7 天(a 中的前 7 天,43,82,...)所有值都显示相同的数量,所以我要绘制的模式只是这些值的平均值。
  • 所以你的意思是如果所有的值出现相同的次数你取它们的平均值,如果你有 7 个值作为 1、1、1、1、2、2、2 你返回 1?跨度>
  • 是的,完全正确,我希望能够换档 7

标签: r plot mode moving-average


【解决方案1】:

您可以使用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 个值在第 1 位,2-8 在第 2 位等等,您可以使用:

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'))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-11-03
    • 2010-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多