2015-07-20 65 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