r - 查找 R 中组的下一个 NA 值之前的行平均值和标准差

标签 r aggregate average

我有一个带有变量 RATE 的数据框,每隔几行就有一个 NA 值:

 ID    RATE
 1     10
 1     15
 1     8
 1     6
 1     NA
 1     10
 1     20
 1     NA
 1     14
 1     2
 2     8
 2     6
 2     NA

在这些行上,我想添加一个变量mean_RATE和sd_RATE,对应于NA行之间所有行的平均值和sd。此平均值和标准差仅针对具有相同 ID 的所有费率进行计算:

 ID    RATE  mean_RATE  sd_RATE
 1     10
 1     15
 1     8
 1     6
 1     NA    9.75       3.86221
 1     10
 1     20
 1     NA    15         7.071068
 1     14
 1     2
 2     8
 2     6
 2     NA    7          1.414214

正如您在上面所需的输出中所看到的,在任何平均值或标准差计算中都不会考虑与 RATE 14 和 2 对应的行,因为下一个 NA 行具有不同的 ID。

有人可以帮助我找到一种有效的方法吗?

最佳答案

我们可以使用tidyverse来做到这一点

library(dplyr)
df %>%
   group_by(ID, grp = cumsum(lag(is.na(RATE), default = FALSE))) %>% 
   mutate(mean_RATE = mean(RATE, na.rm = TRUE), sd_RATE = sd(RATE, na.rm = TRUE)) %>%
   mutate_at(vars(matches("_RATE")), funs(replace(., !is.na(RATE), NA)))
# A tibble: 13 x 5
# Groups: ID, grp [4]
#      ID  RATE   grp mean_RATE sd_RATE
#   <int> <int> <int>     <dbl>   <dbl>
# 1     1    10     0     NA      NA   
# 2     1    15     0     NA      NA   
# 3     1     8     0     NA      NA   
# 4     1     6     0     NA      NA   
# 5     1    NA     0      9.75    3.86
# 6     1    10     1     NA      NA   
# 7     1    20     1     NA      NA   
# 8     1    NA     1     15.0     7.07
# 9     1    14     2     NA      NA   
#10     1     2     2     NA      NA   
#11     2     8     2     NA      NA   
#12     2     6     2     NA      NA   
#13     2    NA     2      7.00    1.41

关于r - 查找 R 中组的下一个 NA 值之前的行平均值和标准差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48267253/

相关文章:

R ggplot geom_hex alpha 透明度

R计算每年超标的天数

flutter - 如何获得抖动中的平均颜色?

r - ggplot2图例仅在图中

r - 使用 for if 和 else 语句 append 数据框或如何将打印放入数据框中

oop - R中的公共(public)和私有(private)插槽?

Python 按元素 AVERAGEIF 相当于 Excel

r - 根据另一列的聚合将非聚合列添加到聚合数据集中

python - 对 for 循环中变量的不同迭代进行平均

c++ - C++中的定时发生器