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

时间:2011-08-22 10:56:45

标签: r matrix dataframe

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

1 2 3 
4 5 6
7 8 9

我需要转换为

7 8 9
4 5 6
1 2 3

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

7 个答案:

答案 0 :(得分:38)

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

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

这是有效的,因为您使用反转的整数序列作为行索引来索引矩阵。 nrow(m):1会产生3 2 1

答案 1 :(得分:27)

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

iris %>% arrange(-row_number())

或者不使用管道操作员

arrange(iris, -row_number())

答案 2 :(得分:7)

我会沿着这一行

将行数从行开始反转行
revdata <-  thedata[dim(thedata)[1L]:1,]

答案 3 :(得分:4)

我们可以颠倒row.names的顺序(仅适用于data.frame):

# create data.frame
m <- matrix(1:9, ncol=3, byrow=TRUE)
df_m <- data.frame(m)

#reverse
df_m[rev(rownames(df_m)), ]

#   X1 X2 X3
# 3  7  8  9
# 2  4  5  6
# 1  1  2  3

答案 4 :(得分:4)

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

MyMatrix = matrix(1:20, ncol = 2)
MyMatrix[ nrow(MyMatrix):1, ]

如果要反转列,只需做

MyMatrix[ , ncol(MyMatrix):1 ]

答案 5 :(得分:2)

Veeery迟到了,但这似乎工作得很快,不需要任何额外的包,很简单:

for(i in 1:ncol(matrix)) {matrix[,i] = rev(matrix[,i])}

我想,对于频繁使用,人们会用它来制作一个功能。 用R v = 3.3.1测试。

答案 6 :(得分:1)

今天遇到这个问题,在这里我为您的利益提供另一种解决方案。

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