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