簡體   English   中英

在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]排序為升序,以返回以下結果:

      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

我查看了有關排序/順序主題的堆棧溢出答案,但沒有發現任何可實現此結果的東西。 請有人提出前進的方向。 如果一個人不能在一行中移動值而不必根據值的位置更改名,則名和行名在結果中並不重要。

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]))}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM