我的数据如下:
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
答案 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