我需要更改/反转数据框中的行,而不是转置数据,而是将底行移到顶部,依此类推。如果数据框是:
1 2 3
4 5 6
7 8 9
我需要转换为
7 8 9
4 5 6
1 2 3
我读过sort()
,但我认为这不是我需要的,或者我无法找到方法。
答案 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)