在R中如何每隔n行选取多行?日时间序列按年筛选固定时段数据
解决方案
方法1:基于日期属性提取(优先推荐)
这种方法不受数据缺测、排序异常、闰年等因素影响,准确率最高。
- 先将
Date列转换为标准日期格式 - 提取日期的月份和日信息,筛选满足10月、且日期在5-24范围内的行
代码示例(dplyr+lubridate版本):
library(dplyr) library(lubridate) # 转换日期列格式 df <- df %>% mutate(Date = as.Date(Date)) # 筛选目标时段数据 target_df <- df %>% filter(month(Date) == 10, day(Date) >= 5, day(Date) <= 24)
基础R版本(无需额外安装包):
# 转换日期列格式 df$Date <- as.Date(df$Date) # 筛选目标数据 target_df <- df[format(df$Date, "%m") == "10" & as.integer(format(df$Date, "%d")) >= 5 & as.integer(format(df$Date, "%d")) <= 24, ]
方法2:连续无缺测数据的行切片方案
如果你可以确定数据是完全按日期连续排列、无任何缺测、无排序错误,可以用slice()+seq()的方式实现:
每年10月5日到24日共20天,你可以先生成每年对应时段的行索引,再批量提取:
library(dplyr) # 按你的数据起始1985-10-01计算,第一个目标时段起始行是第5行,共25个水文年(1985-2009) start_rows <- seq(from = 5, by = 365, length.out = 25) # 生成所有要提取的行号:每个起始行往后取19行(加上起始行共20行) target_rows <- as.vector(sapply(start_rows, function(x) x:(x+19))) # 切片提取 target_df <- df %>% slice(target_rows)
注意:该方法仅适用于完全连续的时序数据,存在缺测或闰年会导致日期错位,优先使用方法1。
内容的提问来源于stack exchange,提问作者Rua Jing
相关产品推荐
相关产品推荐

