在R中移动行

时间:2018-08-02 16:44:49

标签: r

我的数据如下:

variable

如何制作数据,使其看起来像这样:

 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?

我最初尝试将第一行下方的所有行向左移动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

2 个答案:

答案 0 :(得分:1)

您可以将shift中的data.table函数与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

答案 1 :(得分:0)

基本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