2014-10-12 1 views
1

У меня есть кадр данных с столбцом даты под названием «End_Date». Я хочу добавить новый столбец «Start_Date», который вычисляет день после предыдущего «End_Date». Например:R Вычислить дату на основе дат в последовательных строках в кадре данных

End_Date <-as.Date(c("2010-11-01", "2010-11-18", "2010-11-26")) 
dates <-data.frame(End_Date) 

В этом примере новый столбец 'Дата начала', чтобы выглядеть следующим образом: даты $ Дата_начала < -as.Date (с (NA, "2010-11-02", «2010 -11-19"))

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

dates$Start_Date <-sapply(2:nrow(dates), 
    function(i) (dates$End_Date[i]-dates$End_Date[i-1])) 

Здесь я создал фрейм данных только с 3 рядами как пример, но мне нужно решение, которое я могу применить к кадрам данных с большим количеством строк.

+0

'as.Date (с (NA, (конец + 1) [- длина (end)]), origin = "1970-01-01") ' –

+0

Я создал фрейм данных с 3 строками для этого примера. Но мне нужно будет сделать это для фрейма данных с ~ 700 строк, так что я ищу какой-то цикл или функцию для этого – user3791234

+0

Зачем вам выбирать его, когда вам не нужно? Неважно, сколько строк есть. Это векторная операция –

ответ

0

Try:

dates$Start_Date<-rep(as.Date(NA,origin = "1970-01-01"),nrow(dates)) 
for(i in 2:nrow(dates)) {dates$Start_Date[i]<- as.Date(dates$End_Date[i-1]+1)} 

Или, как Ричард предложил в комментариях, гораздо лучше метод:

dates$Start_Date<-as.Date(c(NA, (End_Date+1)[-length(End_Date)]), origin = "1970-01-01") 
Смежные вопросы