我需要基于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。
答案 0 :(得分:0)
这里是一个解决方案,它使用两个简单的ifelse
和dplyr
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