在 R 中:尝试创建一个新列,以数字方式指示包含日期的另一列是否满足时间段条件。代码运行,但它不返回正确的值(即,当只有一半的条目满足“1”条件时,每个条目在新列中返回为 1。
DF %>%
mutate(g = ifelse(Program.Start.Date >= 2023-08-03 | Program.Start.Date <= 2023-11-30, 1,
ifelse(Program.Start.Date <= 2023-08-03 | Program.Start.Date>= 2023-11-30, 0)))
我也尝试过:
DF %>%
mutate(g = ifelse(Program.Start.Date >= 2023-08-03 | Program.Start.Date <= 2023-11-30, 1, 0))
新列 G 中的所有行都返回“1”。我还使用 Lubridate 将“Program.Start.Date”列转换为年月日格式。
有两件事存在争议:
ymd()
语句中使用 ifelse()
值|
在R中表示“或”,我认为你的意思是&
。在您的代码中,所有日期都等于 TRUE
。试试这个:library(lubridate)
library(dplyr)
# Sample data
df <- data.frame(Program.Start.Date = seq(ymd("2023-08-01"),
ymd("2023-11-30"),
by = "day"))
df <- df %>%
mutate(g = ifelse(Program.Start.Date >= ymd("2023-08-03") &
Program.Start.Date <= ymd("2023-11-30"), 1, 0))
head(df)
Program.Start.Date g
1 2023-08-01 0
2 2023-08-02 0
3 2023-08-03 1
4 2023-08-04 1
5 2023-08-05 1
6 2023-08-06 1