我还是这个组和 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)
或类似的解决方案。帮助将不胜感激!
您可以.drop = FALSE在group_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)