2016-10-17 2 views
2

У меня есть dataframe так:Как перенести каждую строку в R dataframe его индекс строки

a b c 
1 1 2 3 
2 1 2 3 
3 1 2 3 

и хотим, чтобы преобразовать его таким образом, что каждая строка сдвигается вправо на основе его индекса строки. Чтобы результат выглядел так:

a b c 
1 1 2 3 
2 0 1 2 
3 0 0 1 

Как достичь этого в R?

+2

Hacky: 'do.call (rbind, lapply (сл (nrow (DF)), функция (я) {dplyr :: лаг (df [i,], i - 1, default = 0)})) ' – alistaire

+0

Имейте в виду, что существует способ' data.table :: shift', но я устал – shayaa

+0

Соответствующая публикация: http: // stackoverflow. com/вопросы/24143992 – zx8754

ответ

1

обобщающих немного больше, начиная с следующего кадра данных

a b c 
1 1 2 3 
2 1 2 3 
3 1 2 3 
4 1 2 3 
5 1 2 3 

t(sapply(1:nrow(df), function(x){ 
         shifted <- rep(0, min(x-1, ncol(df))) 
         if(ncol(df)>=x) shifted <- c(shifted, df[x,1:(ncol(df)-x+1)]) 
         unlist(shifted)})) 
    a b c 
[1,] 1 2 3 
[2,] 0 1 2 
[3,] 0 0 1 
[4,] 0 0 0 
[5,] 0 0 0 
Смежные вопросы