类似于这个帖子Calculate cummean() and cumsd() while ignoring NA values and filling NAs,但我更愿意坚持tidyverse

我的数据:

structure(list(season = c("Winter", "Winter", "Winter", "Winter", 
"Winter", "Winter", "Winter", "Winter", "Winter", "Spring", "Spring", 
"Spring", "Spring", "Spring", "Spring", "Spring", "Spring", "Spring"
), tmean = c(NA, 2, 3, 4, NA, NA, NA, 8, NA, 7, 8, 9, NA, NA, 
5, 3, 2, NA)), class = "data.frame", row.names = c(NA, -18L))

season tmean
Winter    NA
Winter     2
Winter     3
Winter     4
Winter    NA
Winter    NA
Winter    NA
Winter     8
Winter    NA
Spring     7
Spring     8
Spring     9
Spring    NA
Spring    NA
Spring     5
Spring     3
Spring     2
Spring    NA

我想要的是:

season tmean cumtmean
Winter    NA       NA
Winter     2        2
Winter     3      2.5
Winter     4        3
Winter    NA        3
Winter    NA        3
Winter    NA        3
Winter     8     4.25
Winter    NA     4.25
Spring     7        7
Spring     8      7.5
Spring     9        8
Spring    NA        8
Spring    NA        8
Spring     5     7.25
Spring     3      6.4
Spring     2     5.66
Spring    NA     5.66

推荐答案

您可以使用replace+cummean来计算累积平均值,使用fill来向下填充Nas:

library(dplyr)
library(tidyr)
df |> 
  group_by(season) |> 
  mutate(cumtmean = replace(tmean, complete.cases(tmean), cummean(na.omit(tmean)))) |> 
  fill(cumtmean) |> 
  ungroup()

# # A tibble: 18 × 3
#    season tmean cumtmean
#    <chr>  <dbl>    <dbl>
#  1 Winter    NA    NA   
#  2 Winter     2     2   
#  3 Winter     3     2.5 
#  4 Winter     4     3   
#  5 Winter    NA     3   
#  6 Winter    NA     3   
#  7 Winter    NA     3   
#  8 Winter     8     4.25
#  9 Winter    NA     4.25
# 10 Spring     7     7   
# 11 Spring     8     7.5 
# 12 Spring     9     8   
# 13 Spring    NA     8   
# 14 Spring    NA     8   
# 15 Spring     5     7.25
# 16 Spring     3     6.4 
# 17 Spring     2     5.67
# 18 Spring    NA     5.67

R相关问答推荐

将第二个图放置在ggplot 2中另一个图的x轴上

用R从API中提取数据

如何计算具有NA的行的更改百分比

以R表示的gglikert地块调整总数

向gggplot 2中的数据和轴标签添加大写和星号

如何删除gggvenn与gggplot绘制的空白?

根据模式将一列拆分为多列,并在R中进行拆分

在R中替换函数中的特定符号

我不能在docker中加载sf

如何自定义3D散点图的图例顺序?

根据文本字符串中的值粘贴新列

可以替代与NSE一起使用的‘any_of()’吗?

找出二叉树中每个 node 在R中的深度?

迭代到DataFrame列并获得成对的值列表(col1->;col2、col2->;col3、col3->;col4等)的正确方法.

线性模型斜率在减少原始数据时提供NA

如何识别倒排的行并在R中删除它们?

如何在条形图中的x和填充变量中包含多个响应变量?

在ggplot2图表中通过端点连接点

在鼠标悬停时使用Plotly更改geom_point大小

使用&Fill&Quot;在gglot中创建 colored颜色 渐变