r - 使用健全性检查基于字符类型列对多个数据表进行排序
问题描述
我有两个数据表,并希望对它们进行排序,以使第一个表的行值与基于名为 的列的第二个表的行值相同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
解决方案
这是一种使用dplyr
and的方法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
推荐阅读
- javascript - 邮递员测试是否填写了所需的输入
- flutter - Flutter Future builder不显示ListView
- c++ - 类向量没有成员
- python - 将小文件合并到大文件中,并为 python 中不匹配的行提供 NaN
- c - 了解 C 中的数组大小
- cmake - cmake:如何复制预构建的二进制文件或脚本文件,而不是编译任何本地文件
- javascript - 如何将变量传递给 vue.js 模板内部的函数?
- reactjs - React-Stripe-Elements handleCardPayment with saved card
- c - Memory error while writing C code to "remove" sub-array from a larger array
- if-statement - 卡在具有多个条件的串联数组公式