R语言 根据具有特定顺序的向量对数据框行进行排序
在这篇文章中,我们将看到如何根据向量的值以特定的顺序对数据框行进行排序。有两个函数可以让我们根据向量的值对数据框行进行排序。
- match()函数
- left_join()函数
示例数据集
data <- data.frame(x1 = 1:5,
x2 = letters[1:5],
x3 = 6:10)
data
x1 x2 x3
1 1 a 6
2 2 b 7
3 3 c 8
4 4 d 9
5 5 e 10
向量,有具体的订购
vec <- c("b", "e", "a", "c", "d")
vec
# "b" "e" "a" "c" "d"
方法1: 使用match()函数根据向量对数据框进行排序。
Match返回一个向量,该向量是其第一个参数在第二个参数中的(第一个)匹配位置。
语法: match(x, table, nomatch = NA_integer_, incomparables = NULL)
参数
- X: 向量或NULL:要匹配的值。支持长向量。
- table: 向量或NULL:要匹配的值。不支持长向量。
- nomatch :在没有找到匹配的情况下返回的值。注意,它被强制为整数。
- incomparables: 不能匹配的值的一个向量。x中任何与该向量中的值相匹配的值都被分配为nomatch值。由于历史原因,FALSE等同于NULL。
代码
data <- data.frame(x1 = 1:5,
x2 = letters[1:5],
x3 = 6:10)
vec <- c("b", "e", "a", "c", "d")
new_dataset <- data[match(vec, data$x2), ]
new_dataset
输出
x1 x2 x3
2 2 b 7
5 5 e 10
1 1 a 6
3 3 c 8
4 4 d 9
从上面的输出中我们可以看到,新的数据框是根据向量的值来排序的。
方法2: 使用dplyr包的left_join()函数。
首先,我们必须安装并加载dplyr包:现在我们可以使用left_join()方法来根据向量的值对数据帧进行排序。
语法: left_join(x, y, by = NULL, copy = FALSE, suffix = c(".x", ".y"), ...)
参数
- x, y: 要连接的tbls
- by: 要连接的变量的一个字符向量。如果是NULL,即默认情况,*_join()将做一个自然连接,使用两个表中所有具有共同名字的变量。一条信息列出了这些变量,这样你就可以检查它们是否正确(要抑制这条信息,只需明确列出你想连接的变量)。
- copy: 如果x和y不是来自同一个数据源,并且copy为 “true”,那么y将被复制到与x相同的src中。这允许你跨src连接表,但这是一个潜在的昂贵操作,所以你必须选择它。
- suffix: 如果x和y中存在非连接的重复变量,这些后缀将被添加到输出中以消除它们的歧义。应该是一个长度为2的字符向量。
代码
install.packages("dplyr")
library("dplyr")
data <- data.frame(x1 = 1:5,
x2 = letters[ 1 : 5] ,
x3 = 6:10)
vec <- c("b", "e", "a", "c", "d")
new_dataset <- left_join(data.frame(x2 = vec),
data,
by = "x2")
print(new_dataset)
输出
x2 x1 x3
1 b 2 7
2 e 5 10
3 a 1 6
4 c 3 8
5 d 4 9