r - 特定值的累积平均值

标签 r cumulative-sum

我只想在值 >0 时计算累积平均值。如果我有一个向量:

v <- c(1, 3, 0, 3, 2, 0)

平均值为 9/6 = 1.5,但我只想在值 >0 时取平均值,因此在本例中为 9/4 = 2.25。但这个平均值是整个系列的。我想在数据集建立和积累时进行平均。所以,最初它会是:

1+3/2, 1+3+0/2, 1+3+0+3/3, 1+3+0+3+2/4, 1+3+0+3+2+0/4

我的数据集有 9,000 行,而且还在不断增长。我可以让 cumsum 工作并计算累计总和,但不是“成功”的累计平均值。

最佳答案

您可以通过将 v 的累加和除以逻辑向量 v > 0 的累加和来解决此问题:

v1 <- cumsum(v)/cumsum(v>0)

给出:

> v1
[1] 1.000000 2.000000 2.000000 2.333333 2.250000 2.250000

当您想省略第一个值时:

v2 <- (cumsum(v)/cumsum(v>0))[-1]

给出:

> v2
[1] 2.000000 2.000000 2.333333 2.250000 2.250000

后者等于问题中指定的期望结果:

> ref <- c((1+3)/2, (1+3+0)/2, (1+3+0+3)/3, (1+3+0+3+2)/4, (1+3+0+3+2+0)/4)
> identical(v2, ref)
[1] TRUE

数据集中的实现:

# create an example dataset
df <- data.frame(rn = letters[seq_along(v)], v)

# calculate the 'succes-cummulative-mean'
library(dplyr)
df %>% 
  mutate(succes_cum_mean = cumsum(v)/cumsum(v>0))

给出:

  rn v succes_cum_mean
1  a 1        1.000000
2  b 3        2.000000
3  c 0        2.000000
4  d 3        2.333333
5  e 2        2.250000
6  f 0        2.250000

关于r - 特定值的累积平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46617255/

相关文章:

r - 使用传单根据海拔高度对 gpx 轨迹进行颜色着色,并在 R 中进行绘制

ssis - 可以在SSIS中实现总数,而无需任何手动编码吗?

sql - 在更新语句中使用 over(partition by order by) 计算运行总和

sql - 更新两列排序的累积总和

mysql - 在 MySQL 中创建累积和列

r - 分组执行 ifelse 的更好方法

R 内存限制警告 vs "unable to allocate..."

r - 使用 rlang 列出 purrr::pmap 中的变量

sql-server - 如何在 SQL Server 2008 查询中显示订单履行情况

在大型数据集上改变窗口大小的滚动平均值