R,在表格中,如何在底部移动行?

时间:2014-11-07 18:35:50

标签: r matrix

我有一张这样的表

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?

3 个答案:

答案 0 :(得分:1)

我写了a function called movememy "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