计算行范围的平均值

温特宇

给定这样的数据框:

A <- c(1,2,3,4,NA,6,7,8,9,10,11,12,13,14,15)
B <- c(NA,NA,NA,20,NA,NA,NA,15,NA,NA,NA,NA,11,NA,9)
DF <- data.frame(A, B)

我想根据B列中的值来计算A列中某个值范围的平均值。具体地说,每当B列中存在一个非NA值时,我都想计算该范围的平均值。 A列上方第2行和下方第2行。

例如,列B中的第一个非NA值是20。因此,我想计算(2,3)上方两行,(NA,6)下方两行以及相邻(4)行的平均值。所以:

mean(2,3,4,NA,6)

同样,行B中的下一个非NA值是15。

mean(6,7,8,9,10)

因此,整个数据帧的最终结果将是新的列C

DF$C <- c(NA,NA,NA,3.75,NA,NA,NA,8,NA,NA,NA,NA,13,NA,14)
丰富的雕刻

您可以尝试以下方法。

nona <- !is.na(DF$B)
DF$C <- replace(
    DF$B, 
    nona, 
    vapply(which(nona), function(i) {
        ii <- (i-2):(i+2)
        mean(DF$A[ii[ii > 0]], na.rm = TRUE)
    }, 1)
)

在这里,我们在B列中找到非NA值,然后使用该向量为我们要在A列中找到平均值的值设置索引,请小心删除如果第一个下标可能出现的任何负下标或B列的两个值不为NA。上面的代码给出了的以下结果DF

    A  B     C
1   1 NA    NA
2   2 NA    NA
3   3 NA    NA
4   4 20  3.75
5  NA NA    NA
6   6 NA    NA
7   7 NA    NA
8   8 15  8.00
9   9 NA    NA
10 10 NA    NA
11 11 NA    NA
12 12 NA    NA
13 13 11 13.00
14 14 NA    NA
15 15  9 14.00

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何计算范围psql的平均值

来自分类Dev

创建动态范围并计算平均值

来自分类Dev

计算多个行子集的平均值

来自分类Dev

联合行计算平均值/总和

来自分类Dev

计算平均值?

来自分类Dev

使用窗口函数计算移动总和/平均值时的动态行范围(SQL Server)

来自分类Dev

从单独的输入文件计算特定行范围内的列平均值

来自分类Dev

计算日期范围内的平均值

来自分类Dev

R选择多年的日期范围并计算值的平均值

来自分类Dev

AngularJS:访问范围变量数组并计算平均值

来自分类Dev

计算日期范围内的平均值

来自分类Dev

如何计算范围为10的数组的平均值?

来自分类Dev

计算模式范围内的平均值

来自分类Dev

取值范围的平均值

来自分类Dev

计算DateInterval的平均值

来自分类Dev

计算平均值C ++

来自分类Dev

计算Datediff的平均值

来自分类Dev

SQL计算平均值

来自分类Dev

从EditTexts计算平均值

来自分类Dev

计算多行平均值

来自分类Dev

函数计算平均值

来自分类Dev

计算字段的平均值

来自分类Dev

JDBC计算平均值

来自分类Dev

计算表中某列的某些行的平均值

来自分类Dev

计算一列最后一百行的平均值

来自分类Dev

匹配单独的数据框时计算行的平均值

来自分类Dev

R:如何计算变量每10行的平均值

来自分类Dev

MySQL计算N行的移动平均值

来自分类Dev

计算排除R中某些列的行的平均值