2016-10-17 56 views
2

轉向我有一個數據幀是這樣的:如何在每一行中的R數據幀由它的行索引

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

哈克:'do.call(rbind,lapply(SEQ(nrow(DF)),函數(I){dplyr ::滯後( df [i,],i - 1,default = 0)}))' – alistaire

+0

確定有一個'data.table :: shift'的方法來做到這一點,但我很累 – shayaa

+0

相關文章:http:// stackoverflow。 com/questions/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 
相關問題