更改矩阵/数据框中的行顺序

pac*_*met 25 r matrix dataframe

我需要更改/反转数据框中的行,而不是转置数据,而是将底行移到顶部,依此类推.如果数据框是:

1 2 3 
4 5 6
7 8 9
Run Code Online (Sandbox Code Playgroud)

我需要转换为

7 8 9
4 5 6
1 2 3
Run Code Online (Sandbox Code Playgroud)

我读过sort()但我不认为这是我需要的,或者我无法找到方法.

And*_*rie 39

可能有更优雅的方式,但这有效:

m <- matrix(1:9, ncol=3, byrow=TRUE)

# m[rev(seq_len(nrow(m))), ]  # Initial answer
m[nrow(m):1, ]
     [,1] [,2] [,3]
[1,]    7    8    9
[2,]    4    5    6
[3,]    1    2    3
Run Code Online (Sandbox Code Playgroud)

这是有效的,因为您使用反转的整数序列作为行索引索引矩阵. nrow(m):1结果3 2 1.


Hol*_*ndl 27

您可以使用dplyr包反转data.frame的顺序:

iris %>% arrange(-row_number())
Run Code Online (Sandbox Code Playgroud)

或者不使用管道操作员

arrange(iris, -row_number())
Run Code Online (Sandbox Code Playgroud)

  • @VeerendraGadekar实际上这将无法正常工作,因为`row.number'实际上是`字符`.您将需要首先将`integer`转换为`iris [order(as.integer(row.names(iris)),decrease = TRUE),]` (4认同)

Hen*_*rik 7

我会沿着这一行以行数开始反转行的索引

revdata <-  thedata[dim(thedata)[1L]:1,]
Run Code Online (Sandbox Code Playgroud)


Rti*_*ist 6

我认为这是最简单的方法:

MyMatrix = matrix(1:20, ncol = 2)
MyMatrix[ nrow(MyMatrix):1, ]
Run Code Online (Sandbox Code Playgroud)

如果要反转列,只需执行

MyMatrix[ , ncol(MyMatrix):1 ]
Run Code Online (Sandbox Code Playgroud)