在使用 R 变异和替换 NA 时分配自定义数字
Assign a custom number while mutating and replacing NA using R
我有一个如下所示的数据框
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(仅适用于这两列)或任何其他为 NA 输入 30 的方法也可以
我希望我的输出如下所示
对于这两列,您可以将 mutate
中的 NA
替换为 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
我有一个如下所示的数据框
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(仅适用于这两列)或任何其他为 NA 输入 30 的方法也可以
我希望我的输出如下所示
对于这两列,您可以将 mutate
中的 NA
替换为 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