"圆形"在R中意思是

时间:2015-09-04 18:13:00

标签: r time-series average mean

给定数月的数据集,如何计算平均数"一个月,考虑到这几个月是循环的?

months = c(1,1,1,2,3,5,7,9,11,12,12,12)
mean(months)
## [1] 6.333333

在这个虚拟的例子中,平均值应该是1月或12月。我看到有循环统计的软件包,但我不确定它们是否适合我的需求。

1 个答案:

答案 0 :(得分:15)

我认为

months <- c(1,1,1,2,3,5,7,9,11,12,12,12)
library("CircStats")
conv <- 2*pi/12 ## months -> radians

现在将月份转换为弧度,计算循环均值,然后转换回月份。假设1月处于“0弧度”/ 12点......我在这里减去1 ...

(res1 <- circ.mean(conv*(months-1))/conv)

结果是-0.3457。你可能想要:

(res1 + 12) %% 12

给出11.65,即12月中途(因为我们仍然在0 = 1月,11 = 12月比例)

认为这是对的,但没有仔细检查过。

对于它的价值,CircStats::circ.mean函数非常简单 - 如果您需要的话,可能不值得加载包的开销:

function (x) 
{
    sinr <- sum(sin(x))
    cosr <- sum(cos(x))
    circmean <- atan2(sinr, cosr)
    circmean
}

在评论中加入@ A.Webb的聪明替代方案:

 m <- mean(exp(conv*(months-1)*1i))
 12+Arg(m)/conv%%12  ## 'direction', i.e. average month
 Mod(m)              ## 'intensity'