了解 R 中 "order" 函数的输出
understanding output of "order" function in R
给定这个数据框:
names <- c("Anna", "Bella", "Christian", "Derrick", "Emma")
scores <- c(10,5,10,9,8)
age <- c(16,16,17,18,21)
test <- data.frame(cbind(names,scores, age))
我希望创建一个按 scores 排名并使用 names 作为决胜局的变量
即虽然安娜和克里斯蒂安都得分为 10,但安娜的排名 == 1 & 克里斯蒂安的 == 2
我的代码:test$rank_by_score <- order(test$scores, test$names, decreasing = T)
当前输出:
names scores age rank_by_score
Anna 10 16 4
Bella 5 16 5
Christian 10 17 2
Derrick 9 18 3
Emma 8 21 1
期望的输出:
names scores age rank_by_score
Anna 10 16 1
Bella 5 16 5
Christian 10 17 2
Derrick 9 18 3
Emma 8 21 4
我当前的输出发生了什么,我如何获得我想要的输出?
编辑以显示 age 和 scores 被编码为整数而不是因数 时的输出
names scores age rank_by_score
Anna 10 16 3
Bella 5 16 1
Christian 10 17 4
Derrick 9 18 5
Emma 8 21 2
我认为您正在寻找 rank
而不是 order
,但是 rank
只能取一列值。所以我们可以先order
基于names
的数据,然后使用rank
.
test <- test[order(test$names), ]
rank(-test$scores, ties.method = "first")
#[1] 1 5 2 3 4
请参阅 ?rank
了解不同的 ties.method
选项。如果我们在出现平局时使用 ties.method = "first"
,则在 ties.method = "last"
.
时,将给第一个出现的条目和相反的条目分配小数字
rank(-test$scores, ties.method = "last")
#[1] 2 5 1 3 4
order
returns 排序后的原始向量索引。
a1 <- order(test$scores, decreasing = TRUE)
a1
#[1] 1 3 4 5 2
a2 <- test$scores
a2
#[1] 10 5 10 9 8
这里,order
的输出可以解释为a2[a1[1]]
(10)是最大的数,其次是a2[a1[2]]
(10)和a2[a1[3]]
(9)等等。
数据
names <- c("Anna", "Bella", "Christian", "Derrick", "Emma")
scores <- c(10,5,10,9,8)
age <- c(16,16,17,18,21)
test <- data.frame(names, scores, age)
给定这个数据框:
names <- c("Anna", "Bella", "Christian", "Derrick", "Emma")
scores <- c(10,5,10,9,8)
age <- c(16,16,17,18,21)
test <- data.frame(cbind(names,scores, age))
我希望创建一个按 scores 排名并使用 names 作为决胜局的变量 即虽然安娜和克里斯蒂安都得分为 10,但安娜的排名 == 1 & 克里斯蒂安的 == 2
我的代码:test$rank_by_score <- order(test$scores, test$names, decreasing = T)
当前输出:
names scores age rank_by_score
Anna 10 16 4
Bella 5 16 5
Christian 10 17 2
Derrick 9 18 3
Emma 8 21 1
期望的输出:
names scores age rank_by_score
Anna 10 16 1
Bella 5 16 5
Christian 10 17 2
Derrick 9 18 3
Emma 8 21 4
我当前的输出发生了什么,我如何获得我想要的输出?
编辑以显示 age 和 scores 被编码为整数而不是因数 时的输出
names scores age rank_by_score
Anna 10 16 3
Bella 5 16 1
Christian 10 17 4
Derrick 9 18 5
Emma 8 21 2
我认为您正在寻找 rank
而不是 order
,但是 rank
只能取一列值。所以我们可以先order
基于names
的数据,然后使用rank
.
test <- test[order(test$names), ]
rank(-test$scores, ties.method = "first")
#[1] 1 5 2 3 4
请参阅 ?rank
了解不同的 ties.method
选项。如果我们在出现平局时使用 ties.method = "first"
,则在 ties.method = "last"
.
rank(-test$scores, ties.method = "last")
#[1] 2 5 1 3 4
order
returns 排序后的原始向量索引。
a1 <- order(test$scores, decreasing = TRUE)
a1
#[1] 1 3 4 5 2
a2 <- test$scores
a2
#[1] 10 5 10 9 8
这里,order
的输出可以解释为a2[a1[1]]
(10)是最大的数,其次是a2[a1[2]]
(10)和a2[a1[3]]
(9)等等。
数据
names <- c("Anna", "Bella", "Christian", "Derrick", "Emma")
scores <- c(10,5,10,9,8)
age <- c(16,16,17,18,21)
test <- data.frame(names, scores, age)