在R中使用ts()函数创建时间序列时如何排除指定时间段?
在base R中从ts对象中排除指定年份范围的元素
当然可以直接排除2015年至2046年的所有元素,不用把它们设为NA。给你两种base R原生的实现方法:
方法一:用window()拆分后合并
window()是处理时间序列的专用函数,可以精准提取指定时间区间的片段,我们可以把需要保留的前后两段分开提取再合并:
# 提取1950年1月到2014年12月的部分 part1 <- window(dat, start = c(1950, 1), end = c(2014, 12)) # 提取2047年1月到2100年12月的部分 part2 <- window(dat, start = c(2047, 1), end = c(2100, 12)) # 合并两段得到筛选后的时间序列 dat_filtered <- c(part1, part2)
方法二:通过时间索引直接筛选
利用time()函数获取每个观测对应的时间值,再用逻辑条件筛选出不需要排除的部分:
# 获取时间序列中每个观测的时间(格式为带小数的年份,比如2015年1月是2015.0) times <- time(dat) # 筛选出不在2015-2046范围内的观测 dat_filtered <- dat[times < 2015 | times >= 2047]
两种方法得到的dat_filtered都是保留了原时间序列属性的ts对象,完全移除了2015到2046年的所有元素,符合你的需求。
内容的提问来源于stack exchange,提问作者Beardedant
相关产品推荐
相关产品推荐

