在重复的注册表上移动窗口

时间:2015-01-22 13:08:39

标签: r

我有一个包含重复代码的列的数据库,然后是另一个包含相关值的列,例如:

[code] 1 1 1 1 2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6 7 7 7 7  
[value]2 3 5 9 5 6 7 8 3 4 5 6 7 3 8 9 6 2 3 4 5 6 3 2 5 6 7 8 

我的目标是计算在居中的移动窗口上取得的值的均值和方差。此移动窗口必须将前2个和下2个注册表视为相关的代码值,例如:对于代码值4,它将如下所示:

2 2 2 2 3 3 3 3 4 4 4 4 5 5 5 5 6 6 6 6

5 6 7 8 3 4 5 6 7 3 8 9 6 2 3 4 5 6 3 2 -> Mean and variance for these values

这是数据框dputcode valuedat列的structure(list(code = c(1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7), value = c(2, 3, 5, 9, 5, 6, 7, 8, 3, 4, 5, 6, 7, 3, 8, 9, 6, 2, 3, 4, 5, 6, 3, 2, 5, 6, 7, 8)), .Names = c("code", "value"), row.names = c(NA, -28L), class = "data.frame")

{{1}}

1 个答案:

答案 0 :(得分:1)

一种方法是:

res <-  sapply(unique(dat$code), function(x) {
             x1 <- dat$value[dat$code %in% (x-2):(x+2)]
              c(mean(x1), var(x1))})
res
#        [,1]  [,2]     [,3]     [,4]     [,5] [,6]     [,7]
#[1,] 5.250000 5.625 5.250000 5.100000 5.100000 5.25 4.750000
#[2,] 4.386364 5.050 5.039474 4.305263 4.305263 5.00 3.840909