gpt4 book ai didi

r - 根据以前的评级创建顺序排名

转载 作者:行者123 更新时间:2023-12-03 23:07:45 24 4
gpt4 key购买 nike

我在顺序更新排名方面遇到了问题,无论我如何尝试寻找解决方案 - 或者自己想出一个解决方案 - 我都失败了。

我正在尝试分析顺序选择实验的结果,参与者必须在其中找到最佳选项(评分最高的选项)。在每次试验中,他们都会得到一个评级。

我有一个 编号 , 一个 订购 和一个 评分 每个选择的变量。 编号 是参与者,评分 表示选项有多好(评级越高越好)和 订购 是试验次数(在本例中,有 4 次试验)

ID       rating        order
1 4 1
1 3 2
1 5 3
1 2 4
2 3 1
2 5 2
2 2 3
2 1 4

我想创建一个名为“current_rank”的新变量,它基本上是当前选择的评级排名。这个变量总是需要考虑所有以前的试验和评级,例如对于具有 的参与者编号 “1”这将是:

试验 1: rating = 4,这意味着这是迄今为止最好的评级,current_rank = 1

试验 2: rating = 3,这意味着这是迄今为止第二好的评级,current_rank = 2

试验 3: rating = 5,这意味着这是迄今为止最好的评级,使其成为新的数字 1,因此 current_rank = 1

试验 4: rating = 2,这意味着这离最好的还差得很远,current_rank = 4

如果我可以对所有参与者和所有选择都这样做,我的数据库应该如下所示:
ID       rating        order        current_rank
1 4 1 1
1 3 2 2
1 5 3 1
1 2 4 4
2 3 1 1
2 5 2 1
2 2 3 3
2 1 4 4

我可以成功地创建一个像这样的整体排名变量:
db %>%
arrange(ID, order) %>%
group_by(ID) %>%
mutate(ovr_rank = min_rank(desc(rating)))

但我的目标是创建一个具有顺序排名的变量。这将使得有可能了解参与者根据先前的评级对当前评级可能形成什么样的意见,而无需知道 future 的评级可能是什么。我尝试创建循环或使用应用函数,但还没有想出解决方案。

任何和所有的想法都非常感谢!

最佳答案

使用 runner在累积窗口(或滚动窗口)中应用任何 R 函数。下面我用了runner滚动评级并对当前“可用”数据应用排名函数(累积排名)。取消注释 print展示什么进入function(x) .

library(dplyr)
library(runner)

data %>%
arrange(ID, order) %>%
group_by(ID) %>%
mutate(
current_rank = runner(
x = rating,
f = function(x) {
# print(x)
rank_available_at_the_moment <- rank(-x, ties.method = "last")
tail(rank_available_at_the_moment, 1)
}
)
)


# # A tibble: 8 x 4
# # Groups: ID [2]
# ID rating order current_rank
# <int> <int> <int> <int>
# 1 1 4 1 1
# 2 1 3 2 2
# 3 1 5 3 1
# 4 1 2 4 4
# 5 2 3 1 1
# 6 2 5 2 1
# 7 2 2 3 3
# 8 2 1 4 4

数据
data <- read.table(text = "ID       rating        order
1 4 1
1 3 2
1 5 3
1 2 4
2 3 1
2 5 2
2 2 3
2 1 4", header = TRUE)

关于r - 根据以前的评级创建顺序排名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61251537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com