【问题标题】:Assign a custom number while mutating and replacing NA using R在使用 R 突变和替换 NA 时分配自定义数字
【发布时间】:2020-12-02 04:13:36
【问题描述】:

我有一个如下所示的数据框

id            date      from       to         type  
  <chr>      <date>     <date>     <date>     <chr>          
 1          2011-02-21 2011-01-01 2011-12-31 NA               
 2          2013-03-11 2013-01-01 2013-12-31 NA               
 3          2015-12-31 2015-01-01 2015-12-31 last             
 4          NA         NA         NA         NA                
 5          NA         NA         NA         NA  

我想计算我们可以向后或向前移动日期的范围。

我编写了以下代码,它适用于Non-NA 场景,如下所示

     data %>%
        mutate(shift_back_max = (date - from) / ddays(1),
                 shift_forward_max = (to - date) / ddays(1)) %>%
        data[c("shift_back_max", "shift_forward_max")][is.na(data[c("shift_back_max", "shift_forward_max")])] <- 30   # error is here with the way I am replacing `NA` with 30

我猜我面临的问题是在 %>% 操作任务期间替换 NA

对于NA scenarios,我想指定自定义范围为 30-30

您可以将NA 替换为 30(仅适用于这两列)或任何其他方法来键入 30 的 NA 也可以

我希望我的输出如下所示

【问题讨论】:

    标签: r dataframe dplyr tidyr lubridate


    【解决方案1】:

    对于这两列,您可以将NA 中的mutate 替换为30:

    library(dplyr)
    library(lubridate)
    
    df %>%
      mutate(shift_back_max = (date - from) / ddays(1),
             shift_forward_max = (to - date) / ddays(1), 
             across(starts_with('shift'), tidyr::replace_na, 30))
    
    #  id       date       from         to type shift_back_max shift_forward_max
    #1  1 2011-02-21 2011-01-01 2011-12-31 <NA>             51               313
    #2  2 2013-03-11 2013-01-01 2013-12-31 <NA>             69               295
    #3  3 2015-12-31 2015-01-01 2015-12-31 last            364                 0
    #4  4       <NA>       <NA>       <NA> <NA>             30                30
    #5  5       <NA>       <NA>       <NA> <NA>             30                30
    

    【讨论】:

    • 感谢您的回复..upvoted..将很快标记答案..您也可以分享我可以阅读的链接
    • 您好,一个快速但相关的问题。我正在尝试将它们写入 mutate 文件中的 csv 文件。 summarize(shift_back_max = - min(shift_back_max, na.rm = TRUE), shift_forward_max = min(shift_forward_max, na.rm = TRUE)) %&gt;% ungroup() -&gt; range_cal write.csv(range_cal) range_cal %&gt;% print %&gt;% rowwise() %&gt;%
    • 我也尝试了下面的ungroup() %&gt;% write.csv(.,file = "range_cal.csv") %&gt;% print %&gt;%,但它不起作用
    • 回答后可以写%&gt;% write.csv('range_cal.csv')
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-09
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 1970-01-01
    相关资源
    最近更新 更多