我正在处理小标题,我想使用第六列中的值在5列中填充na。看起来很低:
Tri_1 Tri_2 Tri_3 Tri_4 Tri_5 average_missing
<int> <int> <int> <int> <int> <dbl>
1 5 33 62 80 29 0
2 NA 27 55 47 8 1
3 NA 6 45 112 4 1
4 NA NA 3 12 21 0
5 3 35 93 36 NA 2
6 NA 10 54 49 11 0
7 NA 18 42 48 11 1
8 NA 20 51 62 9 0
9 NA 25 97 119 6 0
10 NA 45 95 59 6 2
我尝试了replace_na()并使用ifelse na进行了变异,但它似乎不适用于多列替换。
答案 0 :(得分:0)
我们可以将mutate_at
与starts_with
一起使用以选择列名称,然后使用if_else
library(dplyr)
df %>% mutate_at(vars(starts_with('Tri')),funs(if_else(is.na(.),average_missing,.)))
Tri_1 Tri_2 Tri_3 Tri_4 Tri_5 average_missing
1 5 33 62 80 29 0
2 1 27 55 47 8 1
3 1 6 45 112 4 1
4 0 0 3 12 21 0
5 3 35 93 36 2 2
6 0 10 54 49 11 0
7 1 18 42 48 11 1
8 0 20 51 62 9 0
9 0 25 97 119 6 0
10 2 45 95 59 6 2
如果您想使用tidyr::replace_na
,则首先需要rowwise()
library(dplyr)
library(tidyr)
df %>% rowwise() %>%
mutate_at(vars(starts_with('Tri')),funs(replace_na(.,average_missing))) %>%
ungroup()