【问题标题】:Collapse rows by value in a column按列中的值折叠行
【发布时间】:2017-07-11 10:12:57
【问题描述】:

我有一个从篮球参考网站上抓取的 NBA 球员统计数据框,如下所示:

Player       | Pos  | Team  | Games | Min   | Points

Alex Abrines |  SG  | OKC   | 68    | 15.5  | 6.0  
Quincy Acy   |  PF  | TOT   | 38    | 14.7  | 5.8  
Quincy Acy   | PF   | DAL   | 6     | 8.0   | 2.2  
Quincy Acy   | PF   | BRK   | 32    | 15.9  | 6.5  
Steven Adams |  C   | OKC   | 80    | 29.9  | 11.3  
Arron Afflalo| SG   | SAC   | 61    | 25.9  | 8.4  

对于为同一支球队效力了整个赛季的球员(如 Abrines、Adams 和 Afflalo),他们只会出现一次。但是,如果一名球员为超过 1 支球队效力(如 Quincy Acy),则数据框包含他效力的每支球队的一行,然后是另一个“TOT”(总计)行。

我想取回每个玩家只有 1 个唯一行的数据框,该行是“TOT”行,其他行将被淘汰。有点难过。

最明智的做法是通过“团队”列中具有“TOT”的行来执行此操作,但对于其中一位具有“TOT”的玩家来说,总行数始终正确的一件事是 Games 价值将高于该玩家其他行中的 Games 值。

【问题讨论】:

    标签: r dataframe tidyr


    【解决方案1】:

    我们可以通过filter做一个群

    library(dplyr)
    df1 %>%
        group_by(Player, Pos) %>%
        filter(Team == "TOT" | n()==1)
    # A tibble: 4 x 6
    # Groups:   Player, Pos [4]
    #        Player   Pos  Team Games   Min Points
    #         <chr> <chr> <chr> <int> <dbl>  <dbl>
    #1  Alex Abrines    SG   OKC    68  15.5    6.0
    #2    Quincy Acy    PF   TOT    38  14.7    5.8
    #3  Steven Adams     C   OKC    80  29.9   11.3
    #4 Arron Afflalo    SG   SAC    61  25.9    8.4
    

    data.table 的类似方法是

    library(data.table)
    setDT(df1)[, .SD[Team=="TOT"|.N==1], .(Player, Pos)]
    

    数据

    df1 <- structure(list(Player = c("Alex Abrines", "Quincy Acy", "Quincy Acy", 
    "Quincy Acy", "Steven Adams", "Arron Afflalo"), Pos = c("SG", 
    "PF", "PF", "PF", "C", "SG"), Team = c("OKC", "TOT", "DAL", "BRK", 
    "OKC", "SAC"), Games = c(68L, 38L, 6L, 32L, 80L, 61L), Min = c(15.5, 
    14.7, 8, 15.9, 29.9, 25.9), Points = c(6, 5.8, 2.2, 6.5, 11.3, 
    8.4)), .Names = c("Player", "Pos", "Team", "Games", "Min", "Points"
    ), class = "data.frame", row.names = c(NA, -6L))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-08-03
      • 1970-01-01
      • 1970-01-01
      • 2018-12-24
      • 2015-09-25
      • 1970-01-01
      • 2016-08-20
      相关资源
      最近更新 更多