r语言 - 用特定组的平均值推算缺失值



我的数据大致如下:

df <- dplyr::tibble(id = c(1, 1, 2, 2, 3, 4, 4, 5),
gender = c("m", "m", "w", "w", "w", "m", "m", "w"),
age_group = c(1, 1, 2, 2, 2, 1, 1, 2),
lab1 = c(NA, 3, 2, 3, NA, NA, 4, 1),
lab2 = c(5, 4, NA, NA, 1, NA, 3, 5))
# A tibble: 8 x 5
id gender age_group  lab1  lab2
<dbl> <chr>      <dbl> <dbl> <dbl>
1     1 m              1    NA     5
2     1 m              1     3     4
3     2 w              2     2    NA
4     2 w              2     3    NA
5     3 w              2    NA     1
6     4 m              1    NA    NA
7     4 m              1     4     3
8     5 w              2     1     5

当然,我的真实数据要复杂得多,也大得多,但是这个例子应该足以解释我想做什么。这都是关于lab1lab2列的NA值的推算。我能想到的一个简单方法是用mean值或median值替换NAs,这些值相对于整体。然而,由于我有每个人的genderage group,我想用属于相同性别和年龄组的值的平均值来替换缺失的值.

因此,在上面的例子中,lab1的第一个缺失值来自male并且属于age_group 1的人。所以我想用lab1的平均值来计算这个值性别为男性且age_group==1的所有其他行.

是否有办法实现这一点与dplyr管道并并行多个实验室值?

您可以使用以下-

library(dplyr)
df %>%
mutate(across(starts_with('lab'), ~replace(., is.na(.), mean(., na.rm = TRUE))), 
.by = c(gender, age_group))
#    id gender age_group  lab1  lab2
#  <dbl> <chr>      <dbl> <dbl> <dbl>
#1     1 m              1   3.5     5
#2     1 m              1   3       4
#3     2 w              2   2       3
#4     2 w              2   3       3
#5     3 w              2   2       1
#6     4 m              1   3.5     4
#7     4 m              1   4       3
#8     5 w              2   1       5

最新更新