问题描述
我正在努力寻找在特定条件下用NA替换数据集(小标题)中的日期列的更简便方法。
这是实际尝试执行任务的代码。我想要的是用缺少的值替换比2020年6月更新且早于1900年1月的日期,而不更改已经存在的缺失值。但是这段代码非常丑陋。有没有更简单的方法,特别是使用tidyverse工具?
library(lubridate)
library(dplyr)
x <- seq(1,5)
y <- c(dmy("04/02/1863","29/10/1989","16/03/2000","14/05/2021",NA))
dat <- tibble(x,y)
dat$y[which(dat$y >= dmy("01/06/2020") | dat$y < dmy("01/01/1900"))] <-
rep(NA,length(dat$y[which(dat$y >= dmy("01/06/2020") | dat$y < dmy("01/01/1900"))]))
dat
解决方法
如果您想知道,使用case_when
语法的@stefan会得到相同的答案
library(dplyr)
library(lubridate)
dat %>%
mutate(y = case_when(y >= dmy("01/06/2020") | y < dmy("01/01/1900") ~ NA_Date_,TRUE ~ y))
# x y
# <int> <date>
# 1 1 NA
# 2 2 1989-10-29
# 3 3 2000-03-16
# 4 4 NA
# 5 5 NA
,
您可以像这样使用if_else
:
library(lubridate)
library(dplyr)
x <- seq(1,5)
y <- c(dmy("04/02/1863","29/10/1989","16/03/2000","14/05/2021",NA))
dat <- tibble(x,y)
dat %>%
mutate(y = if_else(y >= dmy("01/06/2020") | y < dmy("01/01/1900"),NA_Date_,y))
#> # A tibble: 5 x 2
#> x y
#> <int> <date>
#> 1 1 NA
#> 2 2 1989-10-29
#> 3 3 2000-03-16
#> 4 4 NA
#> 5 5 NA