gpt4 book ai didi

r - 计算 R 中的一个值以与下一个最高的排名值联系起来

转载 作者:行者123 更新时间:2023-12-04 08:32:31 27 4
gpt4 key购买 nike

鉴于以下小标题,我想改变一个新列,指示将排名中的下一个最高排名所需的额外计数。

v <- tribble(
~rank, ~name, ~count,
1, "Mary", 100,
2, "Fred", 96,
3, "Sue", 90,
3, "Michelle", 90,
4, "Tom", 72
)
我试过 dplyr的滞后函数 ( v %>% mutate(toTie = lag(count) - count) )。这是有效的,但在有联系时不起作用,因为将第一次之后的任何联系观察与具有相同值的观察进行比较。例如,在 mutate 之后我有这个:
   rank name     count toTie
<dbl> <chr> <dbl> <dbl>
1 1 Mary 100 NA
2 2 Fred 96 4
3 3 Sue 90 6
4 3 Michelle 90 0
5 4 Tom 72 18
这个输出正确地说,排名第三的 Sue 需要 6 来追平排名第二的 Fred。但是因为它将 Michelle 与 Sue(而不是 Fred)进行比较,所以它说 Michelle 不需要任何人来联系 Sue。这是事实,但不是本意。米歇尔和苏一样,需要 6 分才能追平第二名弗雷德。
任何关于更好方法的想法将不胜感激。

最佳答案

我们可以在 lag 上得到差异'count' 的 'distinct' 值并执行 right_join

library(dplyr)
v %>%
distinct(count) %>%
mutate(ToTie = lag(count)- count) %>%
right_join(v) %>%
select(names(v), ToTie)
-输出
# A tibble: 5 x 4
# rank name count ToTie
# <dbl> <chr> <dbl> <dbl>
#1 1 Mary 100 NA
#2 2 Fred 96 4
#3 3 Sue 90 6
#4 3 Michelle 90 6
#5 4 Tom 72 18

或者另一个选项是 fill
library(tidyr)
v %>%
mutate(toTie = lag(count) - count,
toTie = na_if(toTie, 0)) %>%
fill(toTie)

关于r - 计算 R 中的一个值以与下一个最高的排名值联系起来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64959369/

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