R语言 数组排序
矢量是一个单维数组,它由一个单一的维度,即长度指定。一个向量可以通过 ‘c() ‘函数来创建。一个值的列表被传递给 c() 函数来创建一个向量。排序可以按升序或降序进行。在排序之前,有几件事需要注意。它们是:。
- 需要进行排序的顺序 – 升序/降序。
- 根据多列标准进行排序。
- 在排序过程中处理缺失和重复的值。分析师必须决定如何处理缺失和重复的值。在删除或替换空值之前,应该考虑对数据的整体影响。
方法1:sort()函数
R语言中的 sort() 函数用于对一个向量进行排序, 默认情况下,它对一个向量按递增顺序排序。 要以降序排序,请在sort函数中添加一个 “降序 “参数。
语法
sort(name_of_vector, decreasing = TRUE)
参数
name_of_vector: 要排序的向量
decreasing: 布尔值,按降序排序。
例1 :
# create a linear array
arr <- c(9, 8, 7, 6, 5, 4, 3, 2, 1)
# use of sort function to sort array
# by default it is sorted in increasing order
sort(arr)
输出
[1] 1 2 3 4 5 6 7 8 9
例2 :
# create linear array
arr <- c(1, 2, 3, 4, 5, 6, 7, 8, 9)
# use in built sort function
# to sort in decreasing order
sort(arr, decreasing = TRUE)
输出
[1] 9 8 7 6 5 4 3 2 1
注意: sort()函数的主要缺点是它不能对数据帧进行排序。
方法2:order()函数
为了克服方法1中的缺点,我们使用 order() 函数,它也可以根据指定的列对数据帧进行排序。要按递减顺序排序,要加负号。数据也可以用多个标准进行排序。假设两个人的年龄相同,那么我们可以根据他们的名字进行排序,即按词法排序。请看下面的例子。
例1 :
# define dataframe
df <- data.frame("Age" = c(12, 21, 15, 5, 25),
"Name" = c("Johnny", "Glen", "Alfie",
"Jack", "Finch"))
# sort the dataframe on the basis of
# age column and store it in newdf
newdf <- df[order(df$Age), ]
# print sorted dataframe
print(newdf)
输出
Age Name
4 5 Jack
1 12 Johnny
3 15 Alfie
2 21 Glen
5 25 Finch
例2 :
# define vector
r = c(10, 20, 30, 40, 50, 60)
# sort in decreasing order
order(-r)
输出
[1] 6 5 4 3 2 1
例3 :
# define dataframe
df <- data.frame("Age" = c(12, 21, 15, 12, 25, 12),
"Name" = c("Johnny", "Glen", "Alfie",
"Jack", "Finch", "Aaron"))
# sort the dataframe first on the basis of
# Age and if age is same perform sort on Name
newdf <- df[order(dfAge, dfName), ]
# print sorted dataframe
print(newdf)
输出
Age Name
6 12 Aaron
4 12 Jack
1 12 Johnny
3 15 Alfie
2 21 Glen
5 25 Finch
注意: 上面的输出是数字的索引。例如,60是矢量中最大的一个,其索引为6。因此,6被显示在第一位。
方法3:使用循环对数组进行排序
- 创建一个线性数组,例如arr
- 创建一个变量swap。如果在遍历整个数组后,swap为false,这意味着数组已经被排序,并中断循环。
- 否则,运行循环并将原数组复制到另一个数组,例如newArr,并开始比较原数组中的相邻元素
- 如果当前元素比前一个元素小,那么就把Arr的当前元素复制到newArr的前一个位置,把Arr的前一个元素复制到newArr的当前位置。现在newArr的元素被交换了。
- 将newArr复制到原数组arr,并使交换=TRUE。
- 重复以上步骤,直到arr被排序完毕
下面是上述方法的实现。
# create linear array
arr <- c(9, 4, 5, 4, 5, 6, 3, 2, 1)
# repeat until break is encountered
repeat
{
# create a variable swap
swap = FALSE
# run loop from 2nd element till last element
for (i in 2:length(arr))
{
# copy original array into newArr
newArr <- arr
if (arr[i - 1] > arr[i])
{
newArr[i - 1] <- arr[i]
newArr[i] <- arr[i - 1]
arr <- newArr
swapped <- TRUE
}
}
if (!swapped) {break}
}
print(arr)
输出
[1] 1 2 3 4 4 5 5 6 9
方法4:使用dplyr包
dplyr包很容易使用,而且很可靠。该包包括 安排() 方法来对数据进行排序。请看下面的例子。
例子1 :
# install package dplyr
install.packages("dplyr")
# import library dplyr
library(dplyr)
# create dataframe
df <- data.frame("Age" = c(12, 21, 15, 5, 25),
"Name" = c("Johnny", "Glen", "Alfie",
"Jack", "Finch"))
# sort the dataframe on the basis of
# age column using arrange method
arrange(df,age)
输出
Age Name
4 5 Jack
1 12 Johnny
3 15 Alfie
2 21 Glen
5 25 Finch