2014-01-28 5 views
18

Если у меня есть вектор суммарной суммы, например.Функциональный способ возврата суммарной суммы?

> vec <- cumsum(1:10) 
[1] 1 3 6 10 15 21 28 36 45 55 

есть функциональный способ перевести vec в это оригинальный вектор c(1:10)?

Прямо сейчас, я использую для цикла, который идет:

> result <- vec[1] 
> for (i in 2:length(vec)) result <- append(result, vec[i]-vec[i-1]) 
> result 
[1] 1 2 3 4 5 6 7 8 9 10 

Но это не кажется очень R, как мне ... Любые идеи?

+1

Я думаю, ваш цикл может быть "vectorised", как 'с (VEC [1], VEC [-1] - VEC [-длина (VEC) ]) ' –

ответ

31

diff Просто используйте, чтобы получить последовательные различия:

> c(vec[1],diff(vec)) 
[1] 1 2 3 4 5 6 7 8 9 10 
+0

Быстрее пальцев, чем я! – Justin

+0

+1 чертовски просто. –

+0

@Justin Так быстро, что я закончил написание этого комментария, прежде чем я начал! – joran

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