gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 07:20:29 29 4
gpt4 key购买 nike

假设我有一个年份整数列表,如下所示:

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

确定连续年份的最长范围以及开始日期和结束日期的最简单和最像 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;

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

最佳答案

我喜欢 diff 的方法和 rle但会这样做

with(rle(diff(olap)), {
dur <- max(lengths[values==1])
end <- sum(lengths[1:which(values==1 & lengths==dur)])+1
list(duration=dur+1, start=olap[end-dur], end=olap[end])
})

# $duration
# [1] 10
#
# $start
# [1] 1997
#
# $end
# [1] 2006

关于r - 如何识别列表中连续年份的最长范围以及开始和结束日期?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31569550/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com