2015-07-20 72 views
0

所以我尝试使用R中拍摄数据,看起来像这样找上果岭(绿色在参数减2笔):只计算R中物品的首次出现?

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 

,因为他在调控两三个孔的制作绿色。

+2

好像你的数据缺少一个“Hole”分组变量。看看这些数据是非常清楚的分组,前四行一起,后三位,后三位,但没有与该分组对应的列。大概你想要计算由玩家分组的第一个“绿色”和这个缺少的石斑鱼。一旦你有了,使用'dplyr :: first()'函数。 – Gregor

+0

谢谢!是的,我有洞数据,这应该有所帮助! – skathan

+2

你的变量名中有一个空格,所以你应该用反引号包装它,比如'\'到Location \''或者可以说更好,不要使用包含空格的变量名。沿着相同的路线,您不能从'Shot'切换到'shot'或'Par'到'par_value',并期望代码找到正确的列。 – Frank

回答

1

这是一种使用 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