R 使用 tidyverse 用其他值的总和填充缺失值

Kev*_*vin 5 r missing-data na tidyverse

我有一个包含许多列和许多行的数据框。

col_1 | col_2 | ... | col_n
 35   |  NA   | ... |   2
  .   |   .   |  .  |   .
  .   |   .   |  .  |   .
  .   |   .   |  .  |   .
 123  |  90   | ... |   NA
Run Code Online (Sandbox Code Playgroud)

某些行包含 NA 值(可以超过 1 个 NA)。

我希望找到包含 1 个 NA 的所有行,并将其替换为其他列的总和。

我如何使用 tidyverse 来实现它?

Tar*_*Jae 4

我使用了 Anil Goyal 的玩具数据(谢谢!)

今天有一个类似的问题请参阅这里: R: Replace NA with other Variables in the df using tidyverse

在这里,我们:

  1. 对行求和
  2. 计算 NA 的数量
  3. 并与 cross 在 col1-4 上应用所需的条件
  4. 我最喜欢的部分是.keep = "unused"删除了“助手”列。
df %>% 
  mutate(rowsum1 = rowSums(., na.rm=TRUE)) %>%
  mutate(count_na = rowSums(is.na(select(.,everything())))) %>% 
  mutate(across(starts_with("col"), ~case_when(count_na ==1 ~coalesce(.,rowsum1),
                                               TRUE ~ as.numeric(.))
                ), .keep ="unused"
         )
Run Code Online (Sandbox Code Playgroud)

输出:

 col_1 col_2 col_3 col_4
1    35   421  1223   767
2    43    54   435    78
3   234    NA    NA    65
4   784     8   687    89
5    23    45    78   146
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢使用 `.keep = "unused"` (+1) (2认同)