1

我正在处理一个小标题,我想使用第六列中的值将 na 填充到 5 列中。看起来很低:

    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 进行变异,但它似乎不适用于多列替换。

4

1 回答 1

0

我们可以使用mutate_atwithstarts_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()
于 2019-04-13T10:31:52.560 回答