我有一个包含重复代码的列的数据库,然后是另一个包含相关值的列,例如:
[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
这是数据框dput
中code
value
和dat
列的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}}
答案 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