使用R更改和替换NA时分配一个自定义编号

问题描述

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

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

enter image description here

我猜我在%>%操作任务期间要替换NA时遇到的问题。

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

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

我希望我的输出如下所示

identifier    date       from       to       type  shift_back_max shift_forward_max
                                            
1          2011-02-21 2011-01-01 2011-12-31 NA                51               313
2          2013-03-11 2013-01-01 2013-12-31 NA                69               295
3          2015-12-31 2015-01-01 2015-12-31 last             364                 0
4          NA         NA         NA         NA                30                30
5          NA         NA         NA         NA                30                30

解决方法

您可以将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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...