在R中移动行

在R中移动行,r,R,我的数据如下: 1 2 3 4 5 0 1 2 3 4 0 0 1 2 3 0 0 0 0 1 0 0 0 0 1 如何使数据看起来像这样: 1 2 3 4 5 1 2 3 4 0 1 2 3 0 0 0 1 0 0 0 1 0 0 0

我的数据如下:

 1    2    3    4    5
 0    1    2    3    4
 0    0    1    2    3
 0    0    0    0    1
 0    0    0    0    1
如何使数据看起来像这样:

 1    2    3    4    5
 1    2    3    4    0
 1    2    3    0    0
 0    1    0    0    0
 1    0    0    0    0
第一行不移位,第二行左移1,第三行左移2,第四行左移3,最后一行左移4

首先,我尝试将第一行下面的所有行向左移动1,但显然,这不起作用

nc  <- ncol(df)
df[-(1), 2:nc] <- df[-(1), 2:(nc+1)]
df[-(1), 10] <- 0
df

nc您可以使用
data.table
中的
shift
功能,使用
fill=0
。如果希望输出为
data.frame
,请将
data.frame()
放在最后一行的周围

mat <- as.matrix(df)
library(data.table)
t(sapply(seq(nrow(mat)), function(i) shift(mat[i,], i - 1, 'lead', fill = 0)))

#      [,1] [,2] [,3] [,4] [,5]
# [1,]    1    2    3    4    5
# [2,]    1    2    3    4    0
# [3,]    1    2    3    0    0
# [4,]    0    1    0    0    0
# [5,]    1    0    0    0    0
matA基本R选项:

m <- as.matrix(read.table(text = "1    2    3    4    5
0    1    2    3    4
0    0    1    2    3
0    0    0    0    1
0    0    0    0    1"))

do.call(rbind, lapply(seq_along(1:nrow(m)), 
                      function(i) {c(m[i, i:ncol(m)], rep(0, i-1))}))

#     V1 V2 V3 V4 V5
#[1,]  1  2  3  4  5
#[2,]  1  2  3  4  0
#[3,]  1  2  3  0  0
#[4,]  0  1  0  0  0
#[5,]  1  0  0  0  0
m