R语言 根据具有特定顺序的向量对数据框行进行排序

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

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程