小编har*_*rry的帖子

如何识别列表中连续年份的最长范围以及开始和结束日期?

假设我有一个年整数列表如下:

olap = c(1992, 1993, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2011, 2012, 2013, 2014);
Run Code Online (Sandbox Code Playgroud)

什么是最不复杂和最像R的方式来确定连续年份的最长范围以及开始日期和结束日期?我希望获得:长度:10,开始年份:1997年,结束年份:2006年.

我一直在网上搜索一下这个网站,人们似乎建议在这种情况下使用rle().所以我解决问题的方法如下:

olap_diff_rle = rle(diff(olap));
max_diff_run = max(olap_diff_rle$lengths[olap_diff_rle$values==1]);
idx = cumsum(olap_diff_rle$lengths)[olap_diff_rle$lengths==max_diff_run] + 1;
max_olap_end_year = olap[idx];
max_olap_start_year = olap_end_year - max_diff_run;
max_olap = max_diff_run + 1;
Run Code Online (Sandbox Code Playgroud)

但这看起来非常优雅.必须有一个不那么复杂的方式来做到这一点!?我只想使用base R,所以没有包.我读过一个人也可能会使用类似的东西which(diff()!= 1)来确定休息时间并从那里继续?

r

8
推荐指数
1
解决办法
240
查看次数

标签 统计

r ×1