【发布时间】:2020-07-29 18:27:27
【问题描述】:
我在按顺序更新排名时遇到问题,无论我如何尝试寻找解决方案 - 或自己想出一个解决方案 - 我都失败了。
我正在尝试分析顺序选择实验的结果,在该实验中,参与者必须找到可能的最佳选项(评分最高的选项)。他们在每次试验中都获得了评分。
我有一个 ID、一个 order 和一个 rating 变量用于每个选择。 ID 是参与者,rating 表示选项的好坏(评分越高越好),order 是试用次数(在这个例子中,有 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”的新变量,它基本上是当前选择的评分排名。这个变量总是需要考虑所有以前的试验和评级,例如对于ID“1”的参与者,这将是:
试用 1:rating = 4,表示这是目前为止最好的评分,current_rank = 1
试用 2:rating = 3,表示这是目前为止第二好的评分,current_rank = 2
试用 3:评分 = 5,这意味着这是迄今为止最好的评分,使其成为新的第 1 名,因此 current_rank = 1
试验 4:评分 = 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)))
但我的目标是创建一个按顺序排列的变量。这将使得可以看到参与者可能基于之前的评级对当前评级形成了什么样的意见,而无需知道未来的评级可能是什么。我尝试创建循环或使用 apply 函数,但还没有找到解决方案。
非常感谢任何和所有想法!
【问题讨论】: