Создать новую переменную на основе значения POSIxct - PullRequest
0 голосов
/ 15 октября 2018

Мне нужно создать новую переменную: version на основе времени / даты в столбце StartDate.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 голосов
/ 15 октября 2018

Это решение от 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")

Это даст вам необходимый вывод.

0 голосов
/ 16 октября 2018

В итоге я использовал комбинацию двух ответов, так как не смог заставить работать строб-код $ StartDate <- mdy_hms (strobe $ StartDate).</p>

строб библиотеки (lubridate) $ StartDate <- as.POSIXct (строб $ StartDate, format = "% y-% m / -% d% H:% M:% S") строб $ version <-ifelse (строб $ StartDate <mdy_hms ("29-29-2018 18:52:47"), 1,2) </p>

0 голосов
/ 15 октября 2018

Здесь решение, оно использует два простых 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...