在 R 中按升序对行数据进行排序
in R sort row data in ascending order
我有一个格式如下的矩阵:
M1 M2 M3 M4 M5 S1 S2
V1 14 19 28 43 10 3 4
V7 25 30 24 9 39 8 4
V8 34 39 6 35 19 9 5
我想对每一行 [1:5] 进行排序,然后对行 [6:7] 进行升序排序,以 return 得到以下结果:
M1 M2 M3 M4 M5 S1 S2
V1 10 14 19 28 43 3 4
V7 9 24 25 30 39 4 8
V8 6 19 34 35 39 5 9
我查看了关于 sort/order 主题的堆栈溢出答案,但没有找到任何可以达到此结果的答案。
请有人提出前进的方向。如果不能在行内移动值而列名必须随着值的位置而改变,那么列名和行名在结果中并不重要。
m <- as.matrix(read.table(text= " M1 M2 M3 M4 M5 S1 S2
V1 14 19 28 43 10 3 4
V7 25 30 24 9 39 8 4
V8 34 39 6 35 19 9 5", header = TRUE))
t(apply(m, 1, function(x) c(sort(x[1:5]), sort(x[6:7]))))
# [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#V1 10 14 19 28 43 3 4
#V7 9 24 25 30 39 4 8
#V8 6 19 34 35 39 5 9
如果 matt
是您的矩阵:
cbind(t(apply(matt[,1:5], 1, sort)),t(apply(matt[,6:7], 1, sort)))
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 10 14 19 28 43 3 4
[2,] 9 24 25 30 39 4 8
[3,] 6 19 34 35 39 5 9
或使用 plyr
以提高可读性:
library(plyr)
f = function(vec) aaply(matt[,vec], 1, sort)
cbind(f(1:5), f(6:7))
my_data <- matrix(data = c(14, 19, 28, 43, 10, 3, 4, 25, 30, 24, 9, 39, 8, 4, 34, 39, 6, 35, 19, 9, 5), nrow = 3, ncol = 7, byrow = TRUE)
首先我创建了一个result
矩阵,
result <- matrix(nrow = 3, ncol = 7)
然后对于每个 my_data
的行,我对前五个元素进行排序,对第 6 和第 7 个元素进行排序,将它们绑定在一起并将它们全部放在 result
矩阵中。
for (i in 1:nrow(my_data)) { result[i, ] <- c(sort(my_data[i, 1:5]), sort(my_data[i, 6:7]))}
我有一个格式如下的矩阵:
M1 M2 M3 M4 M5 S1 S2
V1 14 19 28 43 10 3 4
V7 25 30 24 9 39 8 4
V8 34 39 6 35 19 9 5
我想对每一行 [1:5] 进行排序,然后对行 [6:7] 进行升序排序,以 return 得到以下结果:
M1 M2 M3 M4 M5 S1 S2
V1 10 14 19 28 43 3 4
V7 9 24 25 30 39 4 8
V8 6 19 34 35 39 5 9
我查看了关于 sort/order 主题的堆栈溢出答案,但没有找到任何可以达到此结果的答案。 请有人提出前进的方向。如果不能在行内移动值而列名必须随着值的位置而改变,那么列名和行名在结果中并不重要。
m <- as.matrix(read.table(text= " M1 M2 M3 M4 M5 S1 S2
V1 14 19 28 43 10 3 4
V7 25 30 24 9 39 8 4
V8 34 39 6 35 19 9 5", header = TRUE))
t(apply(m, 1, function(x) c(sort(x[1:5]), sort(x[6:7]))))
# [,1] [,2] [,3] [,4] [,5] [,6] [,7]
#V1 10 14 19 28 43 3 4
#V7 9 24 25 30 39 4 8
#V8 6 19 34 35 39 5 9
如果 matt
是您的矩阵:
cbind(t(apply(matt[,1:5], 1, sort)),t(apply(matt[,6:7], 1, sort)))
[,1] [,2] [,3] [,4] [,5] [,6] [,7]
[1,] 10 14 19 28 43 3 4
[2,] 9 24 25 30 39 4 8
[3,] 6 19 34 35 39 5 9
或使用 plyr
以提高可读性:
library(plyr)
f = function(vec) aaply(matt[,vec], 1, sort)
cbind(f(1:5), f(6:7))
my_data <- matrix(data = c(14, 19, 28, 43, 10, 3, 4, 25, 30, 24, 9, 39, 8, 4, 34, 39, 6, 35, 19, 9, 5), nrow = 3, ncol = 7, byrow = TRUE)
首先我创建了一个result
矩阵,
result <- matrix(nrow = 3, ncol = 7)
然后对于每个 my_data
的行,我对前五个元素进行排序,对第 6 和第 7 个元素进行排序,将它们绑定在一起并将它们全部放在 result
矩阵中。
for (i in 1:nrow(my_data)) { result[i, ] <- c(sort(my_data[i, 1:5]), sort(my_data[i, 6:7]))}