2015-07-01 3 views
0

У меня есть таблица в R нравится:R добавить конкретные (разные) количество раз, чтобы весь столбец

start    duration 
02/01/2012 20:00:00 5 
05/01/2012 07:00:00 6 
etc...    etc... 

Я получил это за счет импорта таблицы из Microsoft Excel, которая выглядит следующим образом:

date  time  duration 
2012/02/01 20:00:00 5 
etc... 

Я тогда слил даты и времени столбцы, выполнив следующий код:

d.f <- within(d.f, { start=format(as.POSIXct(paste(date, time)), "%m/%d/%Y %H:%M:%S") }) 

Я хочу, чтобы создать третью седловины umn называется «end», который будет рассчитываться как количество часов после начала. Я уверен, что мое время - это вектор POSIXct. Я видел, как манипулировать одним объектом datetime, но как я могу это сделать для всего столбца?

Ожидаемый результат должен выглядеть следующим образом:

start    duration end 
02/01/2012 20:00:00 5   02/02/2012 01:00:00 
05/01/2012 07:00:00 6   05/01/2012 13:00:00 
etc...    etc... etc... 
+0

Этот вопрос должен иметь R-код, поэтому мы знаем, как вы ссылаетесь на свои данные и т. д. Имейте в виду, что ваш следующий quesiton –

ответ

5

Использование lubridate

> library(lubridate) 
> df$start <- mdy_hms(df$start) 
> df$end <- df$start + hours(df$duration) 
> df 
#    start duration     end 
#1 2012-02-01 20:00:00  5 2012-02-02 01:00:00 
#2 2012-05-01 07:00:00  6 2012-05-01 13:00:00 

данные

df <- structure(list(start = c("02/01/2012 20:00:00", "05/01/2012 07:00:00" 
), duration = 5:6), .Names = c("start", "duration"), class = "data.frame", row.names = c(NA, 
-2L)) 
2

Вы можете просто добавить dur*3600 в start столбец кадра данных. Например. с одной датой:

start = as.POSIXct("02/01/2012 20:00:00",format="%m/%d/%Y %H:%M:%S") 
start 
[1] "2012-02-01 20:00:00 CST" 
start + 5*3600 
[1] "2012-02-02 01:00:00 CST" 
Смежные вопросы