2015-07-10 5 views
0

Так что у меня возникли проблемы с созданием счетчика, надеюсь, вы все сможете помочь. Допустим, у меня есть векторДля каждого элемента заданного вектора генерируйте последовательность с X, X-1, ..., X- (N-1)

x <- c(40,10,60) 

Нужный результат будет новая матрица 3 х каждая строка является новая дата ищет что-то вроде этого ..

40 39 38 37 36 35 34 33 32 31 30... 
10 9 8 7 6 5 4 3 2 1 0 0 0 
60 59 58 57 56 55 54 53 52 51 50 

То, что я хочу для строки в вычесть из предыдущей записи n число раз. Как мне это сделать?

Любая помощь очень ценится.

+0

* «Желаемый результат будет новым вектором 3 x n" *. Нет такой вещи, как «вектор 3 x n». Вы имеете в виду матрицу, массив или фреймворк? – smci

+0

Кроме того, из '4 3 2 1 0 0 0' вы хотите, чтобы число/последовательность данных были зажаты в 0 (не может идти отрицательно). Один из способов - использовать «pmax». – smci

+0

't (mapply (function (y) c (rev (sequence (y)), rep (0, max (x) + 1 - y)), x))' – rawr

ответ

2
> n = 12 # or whatever you want 

> t(sapply(c(40,10,60), function(x) pmax(seq(x, (x-n+1), -1), 0))) 
    [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] 
[1,] 40 39 38 37 36 35 34 33 32 31 30 29 28 
[2,] 10 9 8 7 6 5 4 3 2  1  0  0  0 
[3,] 60 59 58 57 56 55 54 53 52 51 50 49 48 
+1

Это именно то, что я искал. Очень кратки, спасибо за быстрый ответ. –

+0

Добро пожаловать! Научитесь любить семью '* apply'. – smci

+1

Да, я знал, что ответ будет в функции * apply, но материал seq прошел бы прямо над мной. –