我有一张这样的表
A:
10 11 12 13 14
20 21 22 23 24
30 31 32 33 34
40 41 42 43 44
50 51 52 53 54
我希望得到一张这样的表:
乙
30 31 32 33 34
40 41 42 43 44
50 51 52 53 54
10 11 12 13 14
20 21 22 23 24
这意味着我需要获取初始矩阵的前k行并将它们放在矩阵的底部。 我怎么能这样做?
我如何从A获得B?
答案 0 :(得分:1)
我写了a function called moveme
,my "mrdwabmisc" package是{{3}}的一部分,可能在这里很有用。
在这种情况下的用法是:
moveme(rownames(A), "1, 2 last")
# [1] "3" "4" "5" "1" "2"
A[moveme(rownames(A), "1, 2 last"), ]
# V1 V2 V3 V4 V5
# 3 30 31 32 33 34
# 4 40 41 42 43 44
# 5 50 51 52 53 54
# 1 10 11 12 13 14
# 2 20 21 22 23 24
它提供"第一","最后","在"之前和#34;在#34;之后作为移动命令的一部分,可以按以下示例链接:
moveme(rownames(A), "1, 4 last; 5 first")
# [1] "5" "2" "3" "1" "4"
moveme(rownames(A), "1, 4 last; 5 first; 2 after 3")
# [1] "5" "3" "2" "1" "4"
这个答案假设我们从" A"开始定义为:
A <- structure(list(V1 = c(10L, 20L, 30L, 40L, 50L), V2 = c(11L, 21L,
31L, 41L, 51L), V3 = c(12L, 22L, 32L, 42L, 52L), V4 = c(13L,
23L, 33L, 43L, 53L), V5 = c(14L, 24L, 34L, 44L, 54L)), .Names = c("V1",
"V2", "V3", "V4", "V5"), class = "data.frame", row.names = c(NA, -5L))
答案 1 :(得分:0)
未经测试但合理的成功机会:
A[c( (k+1):nrow(A), 1:k) , ]
如果k代表要移动的行数,w + k也是你希望它们移动到和的位置,那么有足够的行来允许这一切发生,那么也许这个未经测试代码将成功进行请求的修改:
A[ c( 1:(w-1) , (w+k+1):(w+2*k+1), w:(w+k), (w+2*k+2):nrow(A) ) , ]
答案 2 :(得分:0)
myMatrix <- matrix(1:20, nrow = 4, byrow = TRUE)
k <- 2
rbind(
myMatrix[-(1:k),]
, myMatrix[1:k,]
)
结果
[,1] [,2] [,3] [,4] [,5]
[1,] 11 12 13 14 15
[2,] 16 17 18 19 20
[3,] 1 2 3 4 5
[4,] 6 7 8 9 10