首页 > 解决方案 > 如果一列是 NA,则使用 dplyR 计算其他列的行平均值

问题描述

在下面的示例中,当 A 列为 NA 时,如何计算行均值?行平均值将替换 A 列中的 NA。使用基数 R,我可以使用它:

foo <- tibble(A = c(3,5,NA,6,NA,7,NA),
              B = c(4,5,4,5,6,4,NA),
              C = c(6,5,2,8,8,5,NA))
foo

tmp <- rowMeans(foo[,-1],na.rm = TRUE)
foo$A[is.na(foo$A)] <- tmp[is.na(foo$A)]
foo$A[is.nan(foo$A)] <- NA

好奇我如何用 dplyR 做到这一点?

标签: rdplyr

解决方案


您可以使用ifelse

library(dplyr)

foo %>% 
  mutate(A = ifelse(is.na(A), rowMeans(., na.rm = TRUE), A), 
         A = replace(A, is.nan(A), NA))

#      A     B     C
#  <dbl> <dbl> <dbl>
#1     3     4     6
#2     5     5     5
#3     3     4     2
#4     6     5     8
#5     7     6     8
#6     7     4     5
#7    NA    NA    NA

推荐阅读