按镜像列值自定义行顺序

问题描述 投票:0回答:1

我有一个这样的数据集:

Tab1 <- read.table(text = "
   nodepair ES1 ++ -- +- -+ 0+ +0 0- -0 00 ES2
1     A1_A1   3  0  4  0  0  0  0  0  0 16   4
2     A1_A1   3  0  4  0  0  0  0  0  0 16   5
3     A1_A1   4  0  5  0  0  0  0  0  0 16   3
4     A1_A1   4  0  5  0  0  0  0  0  0 16   5
5     A1_A1   5  0  5  0  0  0  0  0  0 15   3
6     A1_A1   5  0  5  0  0  0  0  0  0 15   4
7     A2_A1   3  0  0  0  0  0  0  0  0 20   4
8     A2_A1   3  0  0  0  0  0  0  0  0 20   5
9     A2_A1   4  0  0  0  0  0  0  0  0 21   5
10    A2_A1   4  0  0  0  0  0  0  0  0 21   3
11    A2_A1   5  0  0  0  0  0  0  0  0 20   4
12    A2_A1   5  0  0  0  0  0  0  0  0 20   3   
", header = TRUE)

我需要首先按节点对排序,然后按 ES1 和 ES2 排序,以便每个 ES1 和 ES2 的镜像组合排序如下:

Tab2 <- read.table(text = "
   nodepair ES1 ++ -- +- -+ 0+ +0 0- -0 00 ES2
1     A1_A1   3  0  4  0  0  0  0  0  0 16   4
3     A1_A1   4  0  5  0  0  0  0  0  0 16   3
2     A1_A1   3  0  4  0  0  0  0  0  0 16   5
5     A1_A1   5  0  5  0  0  0  0  0  0 15   3
4     A1_A1   4  0  5  0  0  0  0  0  0 16   5
6     A1_A1   5  0  5  0  0  0  0  0  0 15   4
7     A2_A1   3  0  0  0  0  0  0  0  0 20   4
10    A2_A1   4  0  0  0  0  0  0  0  0 21   3
8     A2_A1   3  0  0  0  0  0  0  0  0 20   5
12    A2_A1   5  0  0  0  0  0  0  0  0 20   3
9     A2_A1   4  0  0  0  0  0  0  0  0 21   5
11    A2_A1   5  0  0  0  0  0  0  0  0 20   4    
", header = TRUE)

我尝试过各种版本的排列和分组依据,但似乎无法破解它

r sorting row
1个回答
0
投票

它需要更多的深入研究,而不是按节点对排序,然后按 ES1 和 ES2 排序。我能得到的最接近的是使用 ES1 和 ES2 中较小的一个来创建 ES3 列,然后按节点对和 ES3 排序。

library(dplyr)
Tab1 |>
  mutate(ES3=ifelse(ES1<ES2,ES1,ES2)) |> 
  arrange(nodepair,ES3)
© www.soinside.com 2019 - 2024. All rights reserved.