我正在try 填充我的数据帧中的NA个值.然而,我想根据每个组的第一个值来填充它们.

#> df = data.frame(
    group = c(rep("A", 4), rep("B", 4)),
    val = c(1, 2, NA, NA, 4, 3, NA, NA)
  )
#> df
  group val
1     A   1
2     A   2
3     A  NA
4     A  NA
5     B   4
6     B   3
7     B  NA
8     B  NA
#> fill(df, val, .direction = "down")
  group val
1     A   1
2     A   2
3     A   2 # -> should be 1
4     A   2 # -> should be 1
5     B   4
6     B   3
7     B   3 # -> should be 4
8     B   3 # -> should be 4

我能用tidyr::fill()美元做这个吗?或者有没有其他(或多或少优雅的)方法来做到这一点?我需要在更长的链(%>%)操作中使用它.

非常感谢!

推荐答案

在分组mutate()内使用tidyr::replace_na()dplyr::first()(或val[[1]]):

library(dplyr)
library(tidyr)

df %>% 
  group_by(group) %>% 
  mutate(val = replace_na(val, first(val))) %>% 
  ungroup()

#> # A tibble: 8 × 2
#>   group   val
#>   <chr> <dbl>
#> 1 A         1
#> 2 A         2
#> 3 A         1
#> 4 A         1
#> 5 B         4
#> 6 B         3
#> 7 B         4
#> 8 B         4

Ps-@richarddmore指出了组的第一个值是NA的情况.上面的代码会将所有NA个值保留为NA.如果您希望替换 for each 组的前non-missing个值,则可以使用!is.na()来子集向量:

df %>% 
  group_by(group) %>% 
  mutate(val = replace_na(val, first(val[!is.na(val)]))) %>% 
  ungroup()

创建于2022-11-17年第reprex v2.0.2

R相关问答推荐

使用sensemakr和fixest feols模型(R)

整数成随机顺序与约束R?

如何在emmeans中计算连续变量的对比度

我不能在docker中加载sf

如何将移除事件分配给动态创建的按钮?

错误:非常长的R行中出现意外符号

在R中使用Scale_y_Break后更改y轴标签

DEN扩展包中的RECT树形图出现异常行为

如何在PackageStatus()中列出&q;不可用的包&q;?

如何在ggplot2中绘制具有特定 colored颜色 的连续色轮

汇总数据帧中的复制列,保持行的唯一性

列名具有特殊字符时的循环回归

从数据创建数字的命名列表.R中的框

如何将这个小列表转换为数据帧?

ggplot斜体轴刻度标签中的单个字符-以前的帖子建议不工作

R-使用stri_trans_General()将其音译为德语字母

将R中对象的CSV数组转换为JSON数组

识别部分重复行,其中一行为NA,其重复行为非NA

R:改进实现简单模型

臭虫?GradeThis::grade_this_code()在`-code-check`块中失败