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"]
这是另一个使用 sapply
和 ifelse
的选项:
# 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
我有一个包含 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"]
这是另一个使用 sapply
和 ifelse
的选项:
# 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