在R中使用过滤函数。需要为赛马数据库分配NA并保持数据集长度相同
我对这个小组和R还是新手。 我在上一个问题上得到了一些非常有用的反馈,希望我能 以下是更多的支持: 我正在研究一个赛马数据库,在这个阶段有4个变量: 赛马编号、比赛id、比赛距离和分配给马的等级(DaH) 比赛的表现 数据集:在R中使用过滤函数。需要为赛马数据库分配NA并保持数据集长度相同,r,filter,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)
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)
)
horse_评级horse_评级
#一个tibble:9x4
马总状花序区
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
我将在数据集上执行一些计算,如平均评级、最大评级等
我想得到一些长度相等的向量
我使用过滤函数来查看不同类型的性能等级
比赛距离(即起跑距离大于10)。但是,如果其中一匹马没有
跑这段距离,然后我注意到结果不包括这一点
输出中的马。即:
> 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
>马的评级%>%
+组别(马)%>%
+过滤器(距离>10)%>%
+总结(平均值=平均值(DaH))
`summary()`解组输出(用`.groups`参数重写)
#一个tibble:2x2
马平均值
1 2 97.5
2 3 82
所以马1已经消失了,因为它没有跑超过10英里的距离。
理想情况下,我需要保持输出向量的长度为3,这样我就可以进行所有的计算
输入到相同长度的数据帧(用于最终数据输出/打印)。
我希望有一种方法可以为horse 1的输出分配NA或类似的值
给予:
#一个tible:2x2
马平均值
11NA
2 2 97.5
3 3 82
或者类似的解决方案。
非常感谢您的帮助 您可以使用
分组依据()
中的.drop=FALSE
参数:
horse\u评级%>%
分组依据(马,.drop=FALSE)%>%
过滤器(距离>10)%>%
总结(平均值=平均值(DaH))
马平均值
11楠
2 2 97.5
3 3 82
不要筛选
首先,在摘要
中进行筛选,这样就不会删除组(马
)
库(dplyr)
马_评级%>%
组别(马)%>%
总结(平均值=平均值(DaH[Dist>10],na.rm=TRUE))
#一个tibble:3x2
#马平均值
#
#11楠
#2 2 97.5
#3 3 82
方法1:
horse_stats <-
horse_ratings %>%
mutate(raceid = as.factor(raceid)) %>%
filter(Dist > 10) %>%
group_by(horse) %>%
summarise_if(is.numeric, c("sum", "mean", "max", "min")) %>%
ungroup() %>%
left_join(horse_ratings %>%
select(horse) %>%
distinct(),
., by = "horse", all.x = TRUE)
horse\u统计数据%
突变(外消旋体=同因子(外消旋体))%>%
过滤器(距离>10)%>%
组别(马)%>%
如果(是数字,c(“总和”、“平均值”、“最大值”、“最小值”))%%,则总结
解组()%>%
左加入(马评分%>%
选择(马)%>%
不同的(),
,by=“horse”,all.x=TRUE)
方法2:
horse_stats <-
horse_ratings %>%
mutate(raceid = factor(raceid),
Dist = ifelse(Dist <= 10, 0, Dist),
DaH = ifelse(Dist == 0, 0, Dist)) %>%
group_by(horse) %>%
summarise_if(is.numeric, c("sum", "mean", "max", "min")) %>%
ungroup() %>%
mutate_if(is.numeric, list(~na_if(., 0)))
horse\u统计数据%
变异(外消旋体=因子(外消旋体),
Dist=ifelse(Dist%
组别(马)%>%
如果(是数字,c(“总和”、“平均值”、“最大值”、“最小值”))%%,则总结
解组()%>%
mutate_if(is.numeric,list(~na_if(,0)))
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
library(dplyr)
horse_ratings %>%
group_by(horse) %>%
summarise(mean_rating = mean(DaH[Dist>10], na.rm = TRUE))
# A tibble: 3 x 2
# horse mean_rating
# <dbl> <dbl>
#1 1 NaN
#2 2 97.5
#3 3 82
library(tidyverse)
horse_stats <-
horse_ratings %>%
mutate(raceid = as.factor(raceid)) %>%
filter(Dist > 10) %>%
group_by(horse) %>%
summarise_if(is.numeric, c("sum", "mean", "max", "min")) %>%
ungroup() %>%
left_join(horse_ratings %>%
select(horse) %>%
distinct(),
., by = "horse", all.x = TRUE)
horse_stats <-
horse_ratings %>%
mutate(raceid = factor(raceid),
Dist = ifelse(Dist <= 10, 0, Dist),
DaH = ifelse(Dist == 0, 0, Dist)) %>%
group_by(horse) %>%
summarise_if(is.numeric, c("sum", "mean", "max", "min")) %>%
ungroup() %>%
mutate_if(is.numeric, list(~na_if(., 0)))