数据准备
本示例数据是自编数据,仅为练习所用,数据结构假设为,两个年份year(2020,2021),两个氮水平nitrogen(N1,N2),两个玉米品种variety(a,b)测定了5个试验指标(变量v1,v2,v3,v4,v5),每个处理3次重复block(1,2,3)。
library(tidyverse) # 调用tidyverse。
df <- read_csv(file = "df.csv") # 导入数据。文档在工作目录下,所以直接给文件名导入。
df # 查看数据。
## # A tibble: 24 × 9
## year nitrogen variety block v1 v2 v3 v4 v5
##
## 1 2020 N1 a 1 1.26 2.14 0.4 5 3.25
## 2 2020 N1 a 2 1.2 2.9 0.1 5.3 1.27
## 3 2020 N1 a 3 1.3 3 0.3 5.6 2.24
## 4 2020 N1 b 1 1.08 1.72 1.8 2.8 1
## 5 2020 N1 b 2 1.05 1.65 1.7 2.5 3.12
## 6 2020 N1 b 3 1.15 1.35 1.5 3.1 4.57
## 7 2020 N2 a 1 1.32 3.78 1.6 6 5.85
## 8 2020 N2 a 2 1.28 4.32 1.4 6.1 6.48
## 9 2020 N2 a 3 1.35 3.95 1.3 6.2 7.21
## 10 2020 N2 b 1 1.33 3.47 2.8 4.1 6.56
## # … with 14 more rows
6.2.3 行排序
Base R
sort(df$v1) # 对df数据集v1进行排序。默认升序。
## [1] 1.05 1.08 1.09 1.15 1.15 1.19 1.20 1.21 1.24 1.24 1.26 1.28 1.28 1.28 1.28
## [16] 1.30 1.30 1.32 1.33 1.35 1.35 1.37 1.40 1.45
sort(df$v1,decreasing = T) # 对df数据集v1进行降序排列。
## [1] 1.45 1.40 1.37 1.35 1.35 1.33 1.32 1.30 1.30 1.28 1.28 1.28 1.28 1.26 1.24
## [16] 1.24 1.21 1.20 1.19 1.15 1.15 1.09 1.08 1.05
rank(df$v1) # 返回向量中每个数值对应的秩(排次)。列数据无重复值时,返回值为整数,若列数据有重复值,返回值会是小数。
## [1] 11.0 7.0 16.5 2.0 1.0 4.5 18.0 13.5 20.5 19.0 13.5 16.5 6.0 8.0 9.5
## [16] 3.0 13.5 20.5 24.0 23.0 22.0 13.5 4.5 9.5
order(df$v1) # 返回向量从小到大排序在原始数据中索引下标。
## [1] 5 4 16 6 23 13 2 14 15 24 1 8 11 17 22 3 12 7 10 9 18 21 20 19
df[order(df$v1),] # 以v1升序排序df数据集。
## # A tibble: 24 × 9
## year nitrogen variety block v1 v2 v3 v4 v5
##
## 1 2020 N1 b 2 1.05 1.65 1.7 2.5 3.12
## 2 2020 N1 b 1 1.08 1.72 1.8 2.8 1
## 3 2021 N1 b 1 1.09 2.71 1.8 4 3.24
## 4 2020 N1 b 3 1.15 1.35 1.5 3.1 4.57
## 5 2021 N2 b 2 1.15 3.35 2.5 5.5 5.7
## 6 2021 N1 a 1 1.19 3.61 0.8 6 3.11
## 7 2020 N1 a 2 1.2 2.9 0.1 5.3 1.27
## 8 2021 N1 a 2 1.21 3.29 0.5 5.7 2.54
## 9 2021 N1 a 3 1.24 3.26 0.7 5.6 1.28
## 10 2021 N2 b 3 1.24 3.46 2.7 4.9 6
## # … with 14 more rows
df[order(df$v1,df$v2),] # 先v1,再v3升序排列。
## # A tibble: 24 × 9
## year nitrogen variety block v1 v2 v3 v4 v5
##
## 1 2020 N1 b 2 1.05 1.65 1.7 2.5 3.12
## 2 2020 N1 b 1 1.08 1.72 1.8 2.8 1
## 3 2021 N1 b 1 1.09 2.71 1.8 4 3.24
## 4 2020 N1 b 3 1.15 1.35 1.5 3.1 4.57
## 5 2021 N2 b 2 1.15 3.35 2.5 5.5 5.7
## 6 2021 N1 a 1 1.19 3.61 0.8 6 3.11
## 7 2020 N1 a 2 1.2 2.9 0.1 5.3 1.27
## 8 2021 N1 a 2 1.21 3.29 0.5 5.7 2.54
## 9 2021 N1 a 3 1.24 3.26 0.7 5.6 1.28
## 10 2021 N2 b 3 1.24 3.46 2.7 4.9 6
## # … with 14 more rows
df[order(-df$v1,-df$v2),] # v1和v2均降序,先v1后v2。
## # A tibble: 24 × 9
## year nitrogen variety block v1 v2 v3 v4 v5
##
## 1 2021 N2 a 1 1.45 4.35 1.8 7.2 5.74
## 2 2021 N2 a 2 1.4 3.8 1.2 7 6.85
## 3 2021 N2 a 3 1.37 4.23 1.6 6.8 7.42
## 4 2020 N2 a 3 1.35 3.95 1.3 6.2 7.21
## 5 2021 N1 b 3 1.35 1.95 1.3 4.3 1.15
## 6 2020 N2 b 1 1.33 3.47 2.8 4.1 6.56
## 7 2020 N2 a 1 1.32 3.78 1.6 6 5.85
## 8 2020 N2 b 3 1.3 3.9 2.2 4.5 7.55
## 9 2020 N1 a 3 1.3 3 0.3 5.6 2.24
## 10 2020 N2 a 2 1.28 4.32 1.4 6.1 6.48
## # … with 14 more rows
df[order(df$v1,-df$v2),] # v1升序,v2降序排列。
## # A tibble: 24 × 9
## year nitrogen variety block v1 v2 v3 v4 v5
##
## 1 2020 N1 b 2 1.05 1.65 1.7 2.5 3.12
## 2 2020 N1 b 1 1.08 1.72 1.8 2.8 1
## 3 2021 N1 b 1 1.09 2.71 1.8 4 3.24
## 4 2021 N2 b 2 1.15 3.35 2.5 5.5 5.7
## 5 2020 N1 b 3 1.15 1.35 1.5 3.1 4.57
## 6 2021 N1 a 1 1.19 3.61 0.8 6 3.11
## 7 2020 N1 a 2 1.2 2.9 0.1 5.3 1.27
## 8 2021 N1 a 2 1.21 3.29 0.5 5.7 2.54
## 9 2021 N2 b 3 1.24 3.46 2.7 4.9 6
## 10 2021 N1 a 3 1.24 3.26 0.7 5.6 1.28
## # … with 14 more rows
tidyverse
df %>% arrange(v1) # 以v1升序排列。
## # A tibble: 24 × 9
## year nitrogen variety block v1 v2 v3 v4 v5
##
## 1 2020 N1 b 2 1.05 1.65 1.7 2.5 3.12
## 2 2020 N1 b 1 1.08 1.72 1.8 2.8 1
## 3 2021 N1 b 1 1.09 2.71 1.8 4 3.24
## 4 2020 N1 b 3 1.15 1.35 1.5 3.1 4.57
## 5 2021 N2 b 2 1.15 3.35 2.5 5.5 5.7
## 6 2021 N1 a 1 1.19 3.61 0.8 6 3.11
## 7 2020 N1 a 2 1.2 2.9 0.1 5.3 1.27
## 8 2021 N1 a 2 1.21 3.29 0.5 5.7 2.54
## 9 2021 N1 a 3 1.24 3.26 0.7 5.6 1.28
## 10 2021 N2 b 3 1.24 3.46 2.7 4.9 6
## # … with 14 more rows
df %>% arrange(desc(v1)) # 以v1降序排列。
## # A tibble: 24 × 9
## year nitrogen variety block v1 v2 v3 v4 v5
##
## 1 2021 N2 a 1 1.45 4.35 1.8 7.2 5.74
## 2 2021 N2 a 2 1.4 3.8 1.2 7 6.85
## 3 2021 N2 a 3 1.37 4.23 1.6 6.8 7.42
## 4 2020 N2 a 3 1.35 3.95 1.3 6.2 7.21
## 5 2021 N1 b 3 1.35 1.95 1.3 4.3 1.15
## 6 2020 N2 b 1 1.33 3.47 2.8 4.1 6.56
## 7 2020 N2 a 1 1.32 3.78 1.6 6 5.85
## 8 2020 N1 a 3 1.3 3 0.3 5.6 2.24
## 9 2020 N2 b 3 1.3 3.9 2.2 4.5 7.55
## 10 2020 N2 a 2 1.28 4.32 1.4 6.1 6.48
## # … with 14 more rows
df %>% arrange(v1, v2) # 多条件排序,先按第一选项排,再按之后选项排。
## # A tibble: 24 × 9
## year nitrogen variety block v1 v2 v3 v4 v5
##
## 1 2020 N1 b 2 1.05 1.65 1.7 2.5 3.12
## 2 2020 N1 b 1 1.08 1.72 1.8 2.8 1
## 3 2021 N1 b 1 1.09 2.71 1.8 4 3.24
## 4 2020 N1 b 3 1.15 1.35 1.5 3.1 4.57
## 5 2021 N2 b 2 1.15 3.35 2.5 5.5 5.7
## 6 2021 N1 a 1 1.19 3.61 0.8 6 3.11
## 7 2020 N1 a 2 1.2 2.9 0.1 5.3 1.27
## 8 2021 N1 a 2 1.21 3.29 0.5 5.7 2.54
## 9 2021 N1 a 3 1.24 3.26 0.7 5.6 1.28
## 10 2021 N2 b 3 1.24 3.46 2.7 4.9 6
## # … with 14 more rows
df %>% arrange(desc(v1), desc(v2)) # 先按v1降序排,再按v2降序排。
## # A tibble: 24 × 9
## year nitrogen variety block v1 v2 v3 v4 v5
##
## 1 2021 N2 a 1 1.45 4.35 1.8 7.2 5.74
## 2 2021 N2 a 2 1.4 3.8 1.2 7 6.85
## 3 2021 N2 a 3 1.37 4.23 1.6 6.8 7.42
## 4 2020 N2 a 3 1.35 3.95 1.3 6.2 7.21
## 5 2021 N1 b 3 1.35 1.95 1.3 4.3 1.15
## 6 2020 N2 b 1 1.33 3.47 2.8 4.1 6.56
## 7 2020 N2 a 1 1.32 3.78 1.6 6 5.85
## 8 2020 N2 b 3 1.3 3.9 2.2 4.5 7.55
## 9 2020 N1 a 3 1.3 3 0.3 5.6 2.24
## 10 2020 N2 a 2 1.28 4.32 1.4 6.1 6.48
## # … with 14 more rows
df %>% arrange(v1, desc(v2)) # 先按v1升序排,再按v2降序排。
## # A tibble: 24 × 9
## year nitrogen variety block v1 v2 v3 v4 v5
##
## 1 2020 N1 b 2 1.05 1.65 1.7 2.5 3.12
## 2 2020 N1 b 1 1.08 1.72 1.8 2.8 1
## 3 2021 N1 b 1 1.09 2.71 1.8 4 3.24
## 4 2021 N2 b 2 1.15 3.35 2.5 5.5 5.7
## 5 2020 N1 b 3 1.15 1.35 1.5 3.1 4.57
## 6 2021 N1 a 1 1.19 3.61 0.8 6 3.11
## 7 2020 N1 a 2 1.2 2.9 0.1 5.3 1.27
## 8 2021 N1 a 2 1.21 3.29 0.5 5.7 2.54
## 9 2021 N2 b 3 1.24 3.46 2.7 4.9 6
## 10 2021 N1 a 3 1.24 3.26 0.7 5.6 1.28
## # … with 14 more rows
min_rank(df$v1) # 返回df数据集v1列秩,即排序次序。默认升序。
## [1] 11 7 16 2 1 4 18 12 20 19 12 16 6 8 9 3 12 20 24 23 22 12 4 9
df %>% mutate(ranks = min_rank(desc(v1))) %>% arrange(ranks) # 增加一列ranks,列值为以v2列为基础的降序排序,再利用arrange函数以ranks进行升序排序。
## # A tibble: 24 × 10
## year nitrogen variety block v1 v2 v3 v4 v5 ranks
##
## 1 2021 N2 a 1 1.45 4.35 1.8 7.2 5.74 1
## 2 2021 N2 a 2 1.4 3.8 1.2 7 6.85 2
## 3 2021 N2 a 3 1.37 4.23 1.6 6.8 7.42 3
## 4 2020 N2 a 3 1.35 3.95 1.3 6.2 7.21 4
## 5 2021 N1 b 3 1.35 1.95 1.3 4.3 1.15 4
## 6 2020 N2 b 1 1.33 3.47 2.8 4.1 6.56 6
## 7 2020 N2 a 1 1.32 3.78 1.6 6 5.85 7
## 8 2020 N1 a 3 1.3 3 0.3 5.6 2.24 8
## 9 2020 N2 b 3 1.3 3.9 2.2 4.5 7.55 8
## 10 2020 N2 a 2 1.28 4.32 1.4 6.1 6.48 10
## # … with 14 more rows
参考资料
R语言编程—基于 tidyverse,人民邮电出版社(待出版),2022.
R语言教程,李东风,https://www.math.pku.edu.cn/teachers/lidf/docs/Rbook/html/_Rbook/index.html
《R数据科学》,人民邮电出版社,2018.