r - 按组在第一个非 NA 值之前填充缺失值 (NA)

标签 r tidyr na

我有一个按“id”分组的数据框和一个包含缺失值的变量“age”,NA

在每个“id”中,我想替换“age”的缺失值,但只“填充”之前 第一个NA 值。

data <- data.frame(id=c(1,1,1,1,1,1,2,2,2,2,2,3,3,3,3,3),
                   age=c(NA,6,NA,8,NA,NA,NA,NA,3,8,NA,NA,NA,7,NA,9))

   id age
1   1  NA
2   1   6 # first non-NA in id = 1. Fill up from here
3   1  NA
4   1   8
5   1  NA
6   1  NA
7   2  NA
8   2  NA
9   2   3 # first non-NA in id = 2. Fill up from here
10  2   8
11  2  NA
12  3  NA
13  3  NA
14  3   7 # first non-NA in id = 3. Fill up from here
15  3  NA
16  3   9

预期输出:

1   1   6
2   1   6
3   1  NA
4   1   8
5   1  NA
6   1  NA
7   2   3
8   2   3
9   2   3
10  2   8
11  2  NA
12  3   7
13  3   7
14  3   7
15  3  NA
16  3   9

我尝试将 fill.direction = "up" 一起使用,如下所示:

library(dplyr)
library(tidyr)

data1 <- data %>% group_by(id) %>%  
  fill(!is.na(age[1]), .direction = "up")

最佳答案

您可以使用 cumall(is.na(age)) 找到第一个非 NA 值之前的位置。

library(dplyr)

data %>%
  group_by(id) %>%
  mutate(age2 = replace(age, cumall(is.na(age)), age[!is.na(age)][1])) %>%
  ungroup()

# A tibble: 16 × 3
      id   age  age2
   <dbl> <dbl> <dbl>
 1     1    NA     6
 2     1     6     6
 3     1    NA    NA
 4     1     8     8
 5     1    NA    NA
 6     1    NA    NA
 7     2    NA     3
 8     2    NA     3
 9     2     3     3
10     2     8     8
11     2    NA    NA
12     3    NA     7
13     3    NA     7
14     3     7     7
15     3    NA    NA
16     3     9     9

关于r - 按组在第一个非 NA 值之前填充缺失值 (NA),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73232625/

相关文章:

r - 将列中的最大值除以行中的值之和

r - 有条件改变或不改变组中的所有变量

r - 如何查找 data.frame 中 NA 的百分比?

r - `summarise` 基于 `group_by` 具有多列,其中一列也有 `NA`

使用数据的 R 日期列错误[数据 = =""] <- NA

r - 多个 data.table 列到一列向量

r - 使用箱线图查找和可视化最好和最差的项目

regex - 使用 Stringr 从字符串中删除多个字符

r - 添加 NA 以使所有列表元素等长

r - 在 R 中将多行转换为单列