首页 > 解决方案 > 使用健全性检查基于字符类型列对多个数据表进行排序

问题描述

我有两个数据表,并希望对它们进行排序,以使第一个表的行值与基于名为 的列的第二个表的行值相同Parameter

使用order(),问题是它只会根据数据表输入进行排序。但是要确保不仅两个数据表都基于Parameter列排序,而且还Parameter通过逐行比较两个数据表之间的列作为完整性检查来正确排序。

请分享任何更快的方法来做到这一点。

第一个表输入

Parameter   Data
R-1          1
R-2          1
R-3          1
P-11         1
P-12         1
P-8          2
P-9          1
P-10         1
R-4          1
R-5          1
P-14         1
P-15         1

第二个表输入

Parameter   Data
R-1          2
P-9          2
R-3          2
P-11         2
P-12         2
P-8          2
R-2          2
P-10         2
R-4          2
R-5          3
P-14         2
P-15         2

期望的输出

第一个表输出

Parameter   Data
R-1         1
R-2         1
R-3         1
R-4         1
R-5         1
P-8         2
P-9         1
P-10        1
P-11        1
P-12        1
P-14        1
P-15        1

第二个表输出

Parameter   Data
R-1         2
R-2         2
R-3         2
R-4         2
R-5         3
P-8         2
P-9         2
P-10        2
P-11        2
P-12        2
P-14        2
P-15        2

标签: rsortingdataframe

解决方案


这是一种使用dplyrand的方法tidyr::separate

library(dplyr); library(tidyr)

# Function to split up parameter into two pieces and sort like example
sort_table <- function(df) {
  df %>%  separate(Parameter, c("letter", "num"), remove = F) %>%
  arrange(desc(letter), as.numeric(num))
}

# Join the two sorted tables
full_join(
  sort_table(table_1),
  sort_table(table_2),
  by = c("Parameter", "letter", "num")
)



#   Parameter letter num Data.x Data.y
#1        R-1      R   1      1      2
#2        R-2      R   2      1      2
#3        R-3      R   3      1      2
#4        R-4      R   4      1      2
#5        R-5      R   5      1      3
#6        P-8      P   8      2      2
#7        P-9      P   9      1      2
#8       P-10      P  10      1      2
#9       P-11      P  11      1      2
#10      P-12      P  12      1      2
#11      P-14      P  14      1      2
#12      P-15      P  15      1      2

推荐阅读