gpt4 book ai didi

r - 使用 tidyverse 计算复杂的差异分数?

转载 作者:行者123 更新时间:2023-12-02 16:10:06 25 4
gpt4 key购买 nike

我有一个包含 70 000 行的大型数据集,我想对其执行一些操作,但找不到合适的解决方案。

     bib sta run course finish comment day
1 42 9 1 SG 19.88 99 1
2 42 17 2 A 19.96 11 1
3 42 27 3 B 20.92 22 1
4 42 39 4 A 19.60 11 1
5 42 48 5 SG 20.24 99 1
6 42 61 6 C 22.90 33 1
7 42 76 7 B 20.70 22 1
8 42 86 8 C 22.74 33 1
9 42 93 9 C 22.75 33 1
10 42 103 10 A 19.79 11 1
11 42 114 11 B 20.67 22 1
12 42 120 12 SG 20.10 99 1

我想以一个小标题结束:

  1. 计算特定日期每个号码布在 SG 类(class)中的平均完成时间。例如,19.88 + 20.24 + 20.10/3
  2. 通过从平均 SG 分数中减去 finish 来计算数据集中每个观察值的差异分数。例如,19.88 - 均值(SG),19.96 - 均值(SG)。

我尝试了以下方法:

  1. 第一组按日期、号码布和类(class)。然后通过SG过滤并计算均值:
avg.sgtime <- df %>%
group_by(day, bib, course) %>%
filter(course == 'SG') %>%
mutate(avg.sg = mean(finish))

导致以下问题

 bib   sta   run course finish comment day   avg.sg
<int> <int> <int> <chr> <dbl> <int> <chr> <dbl>
1 42 9 1 SG 19.9 99 1 20.1
2 42 48 5 SG 20.2 99 1 20.1
3 42 120 12 SG 20.1 99 1 20.1
4 42 6 1 SG 20.0 99 2 19.9
5 42 42 5 SG 19.8 77 2 19.9
6 42 130 15 SG 19.9 99 2 19.9
7 42 6 1 SG 20.6 99 3 20.5
8 42 68 12 SG 20.6 77 3 20.5
9 42 90 15 SG 20.4 77 3 20.5


最后,我使用以下语法将两个 tibbles 连接在一起:


df %>% full_join(avg.sgtime) %>%
mutate(diff = finish - avg.sg)

但是,这是行不通的。它仅适用于 SG 类(class),但不适用于类(class) A、B 和 C。是否有解决此问题的方法或有更好的解决方案?

bib sta run course finish comment day   avg.sg         diff
1 42 9 1 SG 19.88 99 1 20.07333 -0.193333333
2 42 17 2 A 19.96 11 1 NA NA
3 42 27 3 B 20.92 22 1 NA NA
4 42 39 4 A 19.60 11 1 NA NA
5 42 48 5 SG 20.24 99 1 20.07333 0.166666667

最佳答案

您可以在 mutate() 中过滤 finish 的值,并根据这些值计算平均值:

df %>%
group_by(day,bib) %>%
mutate(
avg.sg = mean(finish[course=="SG"]),
diff = finish - avg.sg)

关于r - 使用 tidyverse 计算复杂的差异分数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68244590/

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