使用日期改变/ifelse条件以返回数字对象

问题描述 投票:0回答:1

在 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”列转换为年月日格式。

r date if-statement mutate
1个回答
0
投票

有两件事存在争议:

  1. 您没有在
    ymd()
    语句中使用
    ifelse()
  2. |
    在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
© www.soinside.com 2019 - 2024. All rights reserved.