R - 按排名提取价值
R - extracting value by rank
假设我有一个根据“值”列排序的数据框,现在看起来像这样:
Name Value
A 2
B 2
C 5
D 5
E 10
F 12
我正在编写一个函数,其中一个参数是等级(例如 rank=2),我希望输出是相应的名称(例如 C & D)。任何领带都应排名相同。
我真的很感激任何指导,因为我已经尝试了多种方法来完成这个并且不断出现某种错误。
我们可以将 Value
转换为 factor
,然后将其转换为 numeric
以获得相同数字的相同排名
getRank <- function(rank) {
df$Name[as.numeric(factor(df$Value)) == rank]
}
getRank(1)
#[1] A B
#Levels: A B C D E F
getRank(2)
#[1] C D
#Levels: A B C D E F
getRank(3)
#[1] E
#Levels: A B C D E F
如果我们需要 character
的输出,我们可以将其包装在 as.character
中
getRank <- function(rank) {
as.character(df$Name[as.numeric(factor(df$Value)) == rank])
}
您可以使用 match
对唯一值集进行索引:
get_rank <- function(r) df$Name[match(df$Value, unique(df$Value)) == r]
get_rank(2)
## [1] C D
## Levels: A B C D E F
假设我有一个根据“值”列排序的数据框,现在看起来像这样:
Name Value
A 2
B 2
C 5
D 5
E 10
F 12
我正在编写一个函数,其中一个参数是等级(例如 rank=2),我希望输出是相应的名称(例如 C & D)。任何领带都应排名相同。
我真的很感激任何指导,因为我已经尝试了多种方法来完成这个并且不断出现某种错误。
我们可以将 Value
转换为 factor
,然后将其转换为 numeric
以获得相同数字的相同排名
getRank <- function(rank) {
df$Name[as.numeric(factor(df$Value)) == rank]
}
getRank(1)
#[1] A B
#Levels: A B C D E F
getRank(2)
#[1] C D
#Levels: A B C D E F
getRank(3)
#[1] E
#Levels: A B C D E F
如果我们需要 character
的输出,我们可以将其包装在 as.character
getRank <- function(rank) {
as.character(df$Name[as.numeric(factor(df$Value)) == rank])
}
您可以使用 match
对唯一值集进行索引:
get_rank <- function(r) df$Name[match(df$Value, unique(df$Value)) == r]
get_rank(2)
## [1] C D
## Levels: A B C D E F