仅计算R中项目的第一次出现?

时间:2015-07-20 16:27:20

标签: r

所以我试图在R中使用R中的镜头数据找到Greens in Regulation(在par减去2杆中的绿色):

Player     Shot Par To_Location   Hole
Tiger Woods 1   4   Fairway        1
Tiger Woods 2   4   Green          1 
Tiger Woods 3   4   Green          1
Tiger Woods 4   4   Hole           1
Tiger Woods 1   3   Rough          2
Tiger Woods 2   3   Green          2
Tiger Woods 3   3   Hole           2
Tiger Woods 1   4   Green          3
Tiger Woods 2   4   Green          3
Tiger Woods 3   4   Hole           3

我一直在使用以下脚本:

result <- df %>% 
group_by(Player) %>%
summarize(GIR = sum(To_Location == "Green" & Par - Shot > 1) / n())

但价值观不正确,很可能是因为它会对一些果岭进行重复计算(如果有鹰机会),也可能是因为我不应该以这种方式进行总结?

我想要一个看起来像这样的结果:

Player        GIR
Tiger Woods   .6666667
因为他在三个洞中的两个洞的规则上取得了绿色。

1 个答案:

答案 0 :(得分:1)

以下是使用top_n dplyr获取第一行的方法。另外,创建一个洞变量,如注释

中所述
g <- rle(df$Par)
df$hole <- rep(seq_along(g$values), times=g$lengths)

result <- df %>% 
  group_by(Player) %>%
  top_n(1, hole) %>%
  summarize(GIR = sum(`To Location` == "Green" & Par - Shot > 1) / n())
#        Player       GIR
# 1 Tiger Woods 0.6666667