根据POSIxct值创建新变量<

时间:2018-10-15 08:51:15

标签: r datetime posixct

我需要基于StartDate列中的Time / Date创建一个新变量:version。 StartDate是POSIxct格式。

2018-03-29 18:52:47之前的所有内容都应将version编码为1。 2018-03-29 18:52:47(含)之后的所有内容都应将version编码为2。 (时区为欧洲/马德里)

RespondentID    StartDate
170721984   3/29/2018 9:26:05
170721984   3/29/2018 11:14:55
170721984   3/29/2018 18:52:47
170721984   3/30/2018 14:15:08
170721984   3/30/2018 17:43:17

我可以对数据框进行排序,只求在第x v1行之前和v2之后进行所有操作,但是我不想“作弊”。在此先感谢您提供的任何帮助,我对R还是陌生的,因此我会坚持使用它,而不是回到SAS。

3 个答案:

答案 0 :(得分:0)

这里是一个解决方案,它使用两个简单的ifelsedplyr library

library(dplyr)
dat$Date <- as.POSIXct(dat$Date, format = "%m/%d/%Y %H:%M")
# this is needed in order to use the correct date format

dat %>% 
  mutate(v1 = ifelse(Date < "2018-03-29 18:52:47", 1, 0),
         v2 = ifelse(Date >= "2018-03-29 18:52:47", 1, 0)) # this creates v1,v2

# RespondentID                Date v1 v2
# 1    170721984 2018-03-29 09:26:00  1  0
# 2    170721984 2018-03-29 11:14:00  1  0
# 3    170721984 2018-03-29 18:52:00  1  0
# 4    170721984 2018-03-30 14:15:00  0  1
# 5    170721984 2018-03-30 17:43:00  0  1

使用的数据:

tt <- "RespondentID Date Hour
    170721984   03/29/2018 9:26:05
    170721984   03/29/2018 11:14:55
    170721984   03/29/2018 18:52:47
    170721984   03/30/2018 14:15:08
    170721984   03/30/2018 17:43:17"

dat <- read.table(text=tt, header=T, stringsAsFactors = F)
dat <- dat %>% 
  mutate(Date = trimws(paste0(Date, " ", Hour))) %>% # this just puts Date as in your example
  select(-Hour)

# RespondentID                Date
# 1    170721984  03/29/2018 9:26:05
# 2    170721984 03/29/2018 11:14:55
# 3    170721984 03/29/2018 18:52:47
# 4    170721984 03/30/2018 14:15:08
# 5    170721984 03/30/2018 17:43:17

答案 1 :(得分:0)

这种来自lubridate的解决方案将为您提供帮助。

time <- read.csv("stack_Time.csv")
library(lubridate)
time$StartDate<- mdy_hms(time$StartDate) 

time$flag <- ifelse(time$StartDate < mdy_hms("03-29-2018 18:52:47"),"v1","v2")

这将为您提供所需的输出。

答案 2 :(得分:0)

由于无法获得结果,我最终使用了两个响应的组合 strobe $ StartDate <-mdy_hms(strobe $ StartDate)代码起作用。

图书馆(润滑) strobe $ StartDate <-as.POSIXct(strobe $ StartDate,format =“%y-%m /-%d%H:%M:%S”) strobe $ version <-ifelse(strobe $ StartDate