【问题标题】:filling na with values from other columns用其他列的值填充 na
【发布时间】:2019-04-13 10:23:44
【问题描述】:

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

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    我们可以使用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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-09
      • 2018-02-27
      • 2020-10-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-08
      • 1970-01-01
      相关资源
      最近更新 更多