在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