R:按2列分组,但仅当第2列不';不匹配

R:按2列分组,但仅当第2列不';不匹配,r,group-by,dplyr,R,Group By,Dplyr,我是R(和dplyr)的新手,目前正在处理一些季节性足球数据,需要一些帮助。目前,如果一名球员转会到同一联赛中的另一家俱乐部,则数据行和所有指标将简单地复制,但使用新的球队id。但是,如果球员转会到另一个联赛,则指标将被拆分 为了保持一致性,我需要解决这个问题,这意味着我必须: 按玩家id分组,其中玩家id不匹配 (足球规则规定一个赛季最多只能为2家俱乐部踢球,因此这就消除了进一步的复杂性,因此这个简单的规则解决了所有问题) 换句话说,如果存在重复项,则对所有行求和,但仅当comp_id不同时

我是R(和dplyr)的新手,目前正在处理一些季节性足球数据,需要一些帮助。目前,如果一名球员转会到同一联赛中的另一家俱乐部,则数据行和所有指标将简单地复制,但使用新的球队id。但是,如果球员转会到另一个联赛,则指标将被拆分

为了保持一致性,我需要解决这个问题,这意味着我必须:

按玩家id分组,其中玩家id不匹配

(足球规则规定一个赛季最多只能为2家俱乐部踢球,因此这就消除了进一步的复杂性,因此这个简单的规则解决了所有问题)

换句话说,如果存在重复项,则对所有行求和,但仅当comp_id不同时

我试着在dplyr中这样做,并希望有某种方式来写,例如:

football_data %>%
group_by(player_id, !comp_id)
但这不起作用,这是正确的

我的另一个选择是基于复合键(player_id,comp_id)和按player_id分组(仅当复合键的计数=1时)创建一个附加列,但即使这样,我也很难用dplyr编写这个列

欢迎提出任何建议

编辑:

这里有近百个指标,因此我将按照以下进行简化:

player_id   player_name   comp,   team,  metric1, metric2, metric3 .....
1            Lacazette     Bund   Dort     20       30       20
1            Lacazette     EPL    Ars      10       15       15
2            Arnautovic    EPL    Stoke    30       40       30     
2            Arnautovic    EPL    W. Ham   30       40       30       
因此,在本例中,当球员移动联赛(拉卡泽特)时,数据指标被分割,但如果转会在同一联赛中(阿纳托维奇),则数据指标不被分割

因此,为了保持一致性,我需要对第一个玩家的指标求和,而不是对第二个玩家

产生输出:

player_id   player_name   comp,   team,  metric1, metric2, metric3 .....
1            Lacazette     Bund   Dort     30       45       35
1            Lacazette     EPL    Ars      30       45       35
2            Arnautovic    EPL    Stoke    30       40       30     
2            Arnautovic    EPL    W. Ham   30       40       30     

基本上,你想

  • 获取
    comp
    分组的
    metric
    变量的玩家级别
    sum
  • 将它们连接回完整的数据帧
    
    

    库(tidyverse)
    #>--附加包装--------------------------------------------------------------------------------------------tidyverse 1.2.1--
    #>v GG2.2.1 v purrr 0.2.4
    #>v TIBLE 1.4.1 v dplyr 0.7.4
    #>三分之三伏0.7.2伏纵梁1.2.0
    #>v读取器1.1.1 v适用于猫0.2.0
    #>--冲突-----------------------------------------------------------------------------------------------整洁的人与人之间的冲突()--
    #>x dplyr::filter()屏蔽stats::filter()
    #>x dplyr::lag()屏蔽stats::lag()
    df%
    不同(玩家id、玩家名称、comp、.keep\u all=T)%>%
    分组依据(玩家id)%>%
    汇总于(变量(度量1:度量3)、函数(总和))%>%
    左加入(df%>%选择(球员id:team),,by=“球员id”)
    #>球员id球员姓名团队度量1度量2度量3
    #>1 1拉卡泽特外滩多特30 45 35
    #>2 1 Lacazette EPL Ars 30 45 35
    #>3 2阿努阿托维奇埃普尔斯托克30
    #>4 2阿努阿托维奇EPL W.哈姆30
    
    您还应提供输入数据和预期输出