R日期比较使用循环

R dates comparison using loop

我有一个包含 1 个日期列的数据框(已转换 as.Date)。

我正在尝试编写一个循环以在另一列中创建一个值,以“检查”死亡日期与固定值(今天的日期)的比较。

fix_date= as.Date(2021-10-28)

for (i in 1:length(df$Death.date)) {
  if (df$Death.date[i] < as.Date(fix_date)){
    df$death_check[i]<-"good"
  }
}

所以对于每一行如果Death.date < fix_date,填充death_check 列为“好”。

它给我这个错误代码:

Error in if (new_possible_population$Death.date[i] < as.Date(exploratory_date)) { : missing value where TRUE/FALSE needed

这是为有关日期值的循环编写代码的正确方法吗?还是有比使用循环更好的方法?

您肯定想为此使用矢量化函数,请查看 dplyr 包:

df %>%
  mutate(death_check = case_when(Death.date < as.Date("2021-10-28") ~ "good"))

如您所见,我也在日期前后添加了 "",这是必要的。如果您的 df$Death.date 实际上不是 Date 格式,您也可以在此处进行更改。

library(data.table)
df <- data.table(
  Death.date = sample(seq(as.Date("2020-01-01"), by = "month", length.out = 25))
)

# just a TRUE for "good" which makes FALSE "bad"
df[, death_check_1 := Death.date < Sys.time()]

# written "good"
df[Death.date < Sys.time(), death_check_2 := "good"]

这是另一个使用 sapplyifelse 的选项:

# make df using Merijn's code
df <- data.frame(Death.date = sample(seq(as.Date("2020-01-01"), 
                 by = "month", 
                 length.out = 25)))

# set the date to check against
fix_date <- as.Date("2021-10-28")

# make the comparison, return "good" or NA
df$death_check <- sapply(df$Death.date, function(x) {
                         ifelse(x < fix_date, "good", NA)
                         })

df