2017-10-17 11 views
0

どのようにすべてのプレイヤーのための最高の手で行を保持することができましたか教えてください。 私はforループを行うことを意図しましたが、私はそれを解決する方法を理解できませんでした。forループを使用して特定のインスタンスの行を削除するR

例プレーヤ1141のために残された行は23658個の手でなければならず、プレーヤ1714のために残された行は678個の手でなければなりません。

**Player PKMP ID Hands** 
    1141 PKMP002 179 
    1141 PKMP002 15 
    1141 PKMP002 22816 
    1141 PKMP002 131 
    1141 PKMP002 23658 
    1141 PKMP002 4914 
    1714 PKMP016 531 
    1714 PKMP016 91 
    1714 PKMP016 678 
    1714 PKMP016 123 
    1745 PKMP032 6821 
    1745 PKMP032 41 
    1745 PKMP032 8 
    1745 PKMP032 204 

答えて

3

このお試しください:

library(dplyr) 

df %>% 
    group_by(Player) %>% 
    filter(Hands == max(Hands)) 

出力:

# A tibble: 3 x 3 
# Groups: Player [3] 
    Player `PKMP ID` Hands 
    <int> <fctr> <int> 
1 1141 PKMP002 23658 
2 1714 PKMP016 678 
3 1745 PKMP032 6821 
+0

が完全に機能します。どうもありがとうございました ! –

2

まずデータを。

Lorenna <- 
structure(list(Player = c(1141L, 1141L, 1141L, 1141L, 1141L, 
1141L, 1714L, 1714L, 1714L, 1714L, 1745L, 1745L, 1745L, 1745L 
), PKMP_ID = c("PKMP002", "PKMP002", "PKMP002", "PKMP002", "PKMP002", 
"PKMP002", "PKMP016", "PKMP016", "PKMP016", "PKMP016", "PKMP032", 
"PKMP032", "PKMP032", "PKMP032"), Hands = c(179L, 15L, 22816L, 
131L, 23658L, 4914L, 531L, 91L, 678L, 123L, 6821L, 41L, 8L, 204L 
)), .Names = c("Player", "PKMP_ID", "Hands"), class = "data.frame", row.names = c(NA, 
-14L)) 

コードが追加されました。 sapplyを使用してすべての作業を行いますが、その結果をt()と転記します。

L <- t(sapply(split(Lorenna, Lorenna$Player), function(x) x[which.max(x$Hands), ])) 
L <- as.data.frame(L) 
row.names(L) <- NULL 
L 
# Player PKMP_ID Hands 
#1 1141 PKMP002 23658 
#2 1714 PKMP016 678 
#3 1745 PKMP032 6821 
関連する問題