在 R 中使用过滤器功能。需要分配 NA 并保持赛马数据库的数据集长度相同

Boo*_*kie 3 r filter

我还是这个组和 R 的新手。我对上次查询有一些非常有用的反馈,所以希望我可以通过以下方式获得更多支持:

我正在研究一个赛马数据库,该数据库在这个阶段有 4 个变量:赛马编号、比赛 ID、比赛距离和为比赛中的马匹表现分配的评级 (DaH)。

数据集:

horse_ratings <- tibble(
  horse=c(1,1,1,2,2,2,3,3,3),
  raceid=c(1,2,3,1,2,3,1,2,3),
  Dist=c(9.47,9.47,10,10.1,10.2,9,11,9.47,10.5),
  DaH=c(101,99,103,101,94,87,102,96,62)
)
Run Code Online (Sandbox Code Playgroud)

给予:

> horse_ratings
# A tibble: 9 x 4
  horse raceid  Dist   DaH
  <dbl>  <dbl> <dbl> <dbl>
1     1      1  9.47   101
2     1      2  9.47    99
3     1      3 10      103
4     2      1 10.1    101
5     2      2 10.2     94
6     2      3  9       87
7     3      1 11      102
8     3      2  9.47    96
9     3      3 10.5     62

Run Code Online (Sandbox Code Playgroud)

我将在数据集上执行许多计算,例如平均评分、最大评分等,这些计算会产生许多相等长度的向量。

我正在使用过滤器功能来查看不同比赛距离(即距离大于 10 开始)获得的性能等级。但是,如果其中一匹马没有跑完那个距离的比赛,那么我注意到结果中不包括输出中的那匹马。IE:

> horse_ratings %>% 
+   group_by(horse) %>% 
+   filter(Dist>10) %>%
+   summarise(mean_rating=mean(DaH))
`summarise()` ungrouping output (override with `.groups` argument)
# A tibble: 2 x 2
  horse mean_rating
  <dbl>       <dbl>
1     2        97.5
2     3        82
Run Code Online (Sandbox Code Playgroud)

所以马 1 消失了,因为它没有跑过大于 10 的距离。我需要理想地保持长度为 3 的输出向量,以便我可以将所有计算放入相同长度的数据帧中(对于我的最终数据输出/打印)。我希望有一种方法可以分配 NA 或类似于马 1 的输出:

# A tibble: 2 x 2
  horse mean_rating
  <dbl>       <dbl>
1     1        NA
2     2        97.5
3     3        82
Run Code Online (Sandbox Code Playgroud)

或类似的解决方案。帮助将不胜感激!

tmf*_*mnk 5

您可以.drop = FALSEgroup_by()以下位置使用参数:

horse_ratings %>%
 group_by(horse, .drop = FALSE) %>% 
 filter(Dist > 10) %>%
 summarise(mean_rating = mean(DaH))

  horse mean_rating
  <dbl>       <dbl>
1     1       NaN  
2     2        97.5
3     3        82  
Run Code Online (Sandbox Code Playgroud)