基于R语言计算奥运会金牌运动员的连续夺冠次数
思路梳理:计算奥运会运动员最长连续夺冠次数
嘿,针对你的需求,给你几个实用的思路方向,不用纠结之前的代码问题啦:
分组后处理年份序列的连续性
首先用group_by(id, name)把每个运动员的数据单独分组,接着用arrange(year)确保年份是按顺序排列的。之后可以用diff(year)计算相邻年份的差值——连续夺冠的话差值应该是4。接下来用cumsum()来生成“分组标识”:当差值不等于4时,就开启一个新的分组。最后对每个分组统计数量,再用max()取出每个运动员的最大连续次数(注意:哪怕只有1次夺冠,次数也是1)。转换为“届数”后找连续整数序列
奥运会每4年一届,你可以把年份转换成“届数”(比如(year - 1896)/4,不过其实只要能把连续夺冠的年份转换成连续整数就行)。之后找这个届数序列里最长的连续整数子序列长度,这里可以用rle()函数(游程编码)来统计连续符合条件的次数,最后加1就是连续夺冠的次数。用窗口函数标记连续项
利用lag()窗口函数获取每个运动员的上一次夺冠年份,然后判断当前年份是否等于上一年份+4,生成一个“是否连续”的标记列。接着用cumsum()对这个标记列进行累积——当标记为不连续时,累积值会增加,这样就能把连续的夺冠记录分到同一组里。最后统计每组的行数,取最大值就是最长连续次数。
这些思路里用到的函数都是tidyverse套件里的常用工具,你可以先从第一个思路入手,逐步拆解实现~
内容的提问来源于stack exchange,提问作者Beginner
相关产品推荐
相关产品推荐

