2016-06-15 4 views
0

У меня есть кадр данных с Id столбец & Дата Столбец.Период между датами в R

enter image description here

По существу, Я хотел бы создать третий столбец (Diff), которая вычисляет разницу между датами, предпочтительно сгруппированных по ID.

Я построил большой POSIXlt из следующего кода

c_time <- as.POSIXlt(df$Gf_Date) 
a <- difftime(c_time[1:(length(c_time)-1)], c_time[2:length(c_time)], units = weeks") 

Однако, когда я пытаюсь cbind на моей data.frame ошибки него

«аргументы подразумевают отличающееся число строк» ​​

как a на одну строку короче исходного data.frame.

Любая помощь была бы принята с благодарностью.

+0

Пожалуйста, не размещайте изображения ваших данных. Вместо этого отправьте сами данные в форме, которая может быть скопирована другими пользователями для воспроизведения вашей ситуации. – RHertel

+1

Итак, существует одна строка с разницей времени 0 (или 'NA'), поскольку у нее нет« предшественника ». Не можете ли вы добавить/добавить такое значение заполнения? Если все в порядке с семантикой, это всегда способ пойти с затуманенными разностными колонками, не так ли? Но я вполне могу пропустить некоторые подробности здесь. Также я не могу поиграть с проблемой ввода, так как @RHertel красиво отметил ;-) – Dilettant

+0

Спасибо @RHertel за сообщение о публикации. Я обязательно включу пример, который можно манипулировать. –

ответ

2

Поскольку разница может быть выполнена только между двумя последующими датами, для первой записи она не определена. Поэтому разумным выбором было бы установить это первое значение на NA.

Это может работать:

c_time <- as.POSIXlt(df$Gf_Date) 
a <- c(NA,`units<-`(diff(c_time),"weeks")) 
cbind(df,diff.dates=a) 

(Наконечник шляпы @thelatemail за ценное предложение, чтобы упростить определение a).

PS: Обратите внимание, что разница в a может отличаться от вашего первоначального подхода. В зависимости от соглашения, которое вы предпочитаете, вы можете использовать a <- -a для преобразования между ними.

+1

Вы можете упростить бит 'diff', поскольку он будет возвращать' difftime' по умолчанию, который может быть преобразован в недели, например 'c (NA, \' units <- \ '(diff (x)," weeks ")) ' – thelatemail

+0

Отлично, @thelatemail! Не возражаете, если я включу ваше предложение в ответ? – RHertel

Смежные вопросы