【发布时间】:2011-11-01 01:33:46
【问题描述】:
我需要更改/反转数据框中的行,而不是转置数据,而是将底行移动到顶部等等。如果数据框是:
1 2 3
4 5 6
7 8 9
我需要转换成
7 8 9
4 5 6
1 2 3
我已阅读有关 sort() 的信息,但我认为这不是我需要的,或者我无法找到方法。
【问题讨论】:
我需要更改/反转数据框中的行,而不是转置数据,而是将底行移动到顶部等等。如果数据框是:
1 2 3
4 5 6
7 8 9
我需要转换成
7 8 9
4 5 6
1 2 3
我已阅读有关 sort() 的信息,但我认为这不是我需要的,或者我无法找到方法。
【问题讨论】:
今天遇到这个问题,在这里我为您的兴趣提供另一种解决方案。
m <- matrix(1:9, ncol=3, byrow=TRUE)
apply(m,2,rev)
【讨论】:
我认为这是最简单的方法:
MyMatrix = matrix(1:20, ncol = 2)
MyMatrix[ nrow(MyMatrix):1, ]
如果你想反转列,只需这样做
MyMatrix[ , ncol(MyMatrix):1 ]
【讨论】:
我们可以颠倒 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
【讨论】:
很晚了,但这似乎工作得很快,不需要任何额外的包并且很简单:
for(i in 1:ncol(matrix)) {matrix[,i] = rev(matrix[,i])}
我想如果经常使用,人们会用它来做一个功能。 使用 R v=3.3.1 测试。
【讨论】:
dplyr::arrange 或某种形式的seq 的矢量化解决方案,因为R 针对矢量运算而不是循环进行了优化。 accepted answer 也不依赖任何额外的包。
我会将行反转为从行数开始的索引,沿着这条线
revdata <- thedata[dim(thedata)[1L]:1,]
【讨论】:
您可以使用 dplyr 包反转 data.frame 的顺序:
iris %>% arrange(-row_number())
或者不使用管道操作符
arrange(iris, -row_number())
【讨论】:
iris[order(row.names(iris), decreasing = T),]
row.numbers 实际上是characters。您需要先转换integer,如iris[order(as.integer(row.names(iris)), decreasing = TRUE),]
iris %>% arrange(desc(row_number()))
可能有更优雅的方法,但这是可行的:
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。
【讨论】: