嵌套If语句日期

Kim*_*ins 3 if-statement r dataframe

我有一个数据框df如下.

Id     ProcessDate
10     2011-12-29 14:14:00
11     2011-12-29 14:16:00
12     2011-12-29 14:14:00
13     2011-12-29 14:20:00
14     2011-12-29 14:49:00
15     2011-12-29 14:51:00
16     2011-12-29 14:53:00
17     2011-12-29 15:11:00
18     2011-12-29 15:13:00 
19     2011-12-29 15:10:00
20     2011-12-29 15:21:00
21     2011-12-29 14:34:00
22     2011-12-29 15:26:00  
Run Code Online (Sandbox Code Playgroud)

我正在尝试创建第三列Status,{Before, during , after }根据此条件包含这三个值中的任何一个.

 if  (df$ProcessDate < 2011-12-29 14:48:00)
 then  df$Status = "Before"
 else if (df$ProcessDate > 2011-12-29 14:48:00 & df$ProcessDate < 2011-12-29 15:16:00)
 then  df$Status = "Between"
 else  df$Status = "After"
Run Code Online (Sandbox Code Playgroud)

最终的数据框应如下所示.

Id     ProcessDate              Status
10     2011-12-29 14:14:00      Before
11     2011-12-29 14:16:00      Before
12     2011-12-29 14:14:00      Before
13     2011-12-29 14:20:00      Before
14     2011-12-29 14:49:00      Between
15     2011-12-29 14:51:00      Between       
16     2011-12-29 14:53:00      Between
17     2011-12-29 15:11:00      Between
18     2011-12-29 15:13:00      Between
19     2011-12-29 15:10:00      Between
20     2011-12-29 15:21:00      After
21     2011-12-29 14:34:00      After
22     2011-12-29 15:26:00      After
Run Code Online (Sandbox Code Playgroud)

我尝试了一些事情而且没有用,对此问题的任何帮助都非常感谢.

DAX*_*lic 6

这可能是一种可能的解决方案

ids = c(10, 11, 12, 13, 14, 15, 16, 17, 18,  19, 20, 21, 22)      
date = c('2011-12-29 14:14:00', '2011-12-29 14:16:00', '2011-12-29 14:14:00', '2011-12-29 14:20:00', '2011-12-29 14:49:00', '2011-12-29 14:51:00', '2011-12-29 14:53:00', '2011-12-29 15:11:00', '2011-12-29 15:13:00', '2011-12-29 15:10:00', '2011-12-29 15:21:00', '2011-12-29 14:34:00', '2011-12-29 15:26:00')
df <- data.frame(Id = ids, 
                 ProcessDate = strptime(date, format = '%Y-%m-%d %H:%M:%S'))


date.status.before <- strptime('2011-12-29 14:48:00', format = '%Y-%m-%d %H:%M:%S')
date.status.after <- strptime('2011-12-29 15:16:00', format = '%Y-%m-%d %H:%M:%S')
ProcessDateStatus <- function(process.date) {
  if  (process.date < date.status.before)
    "Before"
  else if (process.date > date.status.before & process.date < date.status.after)
    "Between"
  else 
    "After"  
}
df$Status <- lapply(df$ProcessDate, ProcessDateStatus)
Run Code Online (Sandbox Code Playgroud)

导致

   Id         ProcessDate  Status
1  10 2011-12-29 14:14:00  Before
2  11 2011-12-29 14:16:00  Before
3  12 2011-12-29 14:14:00  Before
4  13 2011-12-29 14:20:00  Before
5  14 2011-12-29 14:49:00 Between
6  15 2011-12-29 14:51:00 Between
7  16 2011-12-29 14:53:00 Between
8  17 2011-12-29 15:11:00 Between
9  18 2011-12-29 15:13:00 Between
10 19 2011-12-29 15:10:00 Between
11 20 2011-12-29 15:21:00   After
12 21 2011-12-29 14:34:00  Before
13 22 2011-12-29 15:26:00   After
Run Code Online (Sandbox Code Playgroud)