用其他列中的值填充na

时间:2019-04-13 10:23:44

标签: r dplyr

我正在处理小标题,我想使用第六列中的值在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进行了变异,但它似乎不适用于多列替换。

1 个答案:

答案 0 :(得分:0)

我们可以将mutate_atstarts_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()