gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:22:56 29 4
gpt4 key购买 nike

我有一个按“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/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com