如何用Base R筛选日期向量中每年4-9月的日期?
在Base R中筛选每年4-9月的日期
嘿,你已经把核心的索引逻辑写对啦!想要根据你得到的index获取目标日期,其实只需要简单的子集化操作就行:
第一步:用你的索引提取目标日期
你已经通过which()得到了符合条件的日期位置,直接把这个索引用到原dates向量上就可以筛选出目标日期:
dates <- seq(as.Date("1951-01-01"), as.Date("2013-12-31"), by="month") # 你的索引计算代码 month <- function(x)as.numeric(format(x, '%m')) index <- which(month(dates) %in% c(4,5,6,7,8,9)) # 提取目标日期 target_dates <- dates[index]
你可以用head(target_dates)或者tail(target_dates)验证一下结果,会看到都是每年4-9月的月份起始日期。
更简洁的写法(一步到位)
其实不用单独定义month函数,也不用which(),直接用逻辑向量子集化就行,代码更紧凑:
dates <- seq(as.Date("1951-01-01"), as.Date("2013-12-31"), by="month") target_dates <- dates[as.numeric(format(dates, "%m")) %in% 4:9]
这里as.numeric(format(dates, "%m")) %in% 4:9会生成一个和dates长度一致的逻辑向量,TRUE代表对应位置的日期是4-9月,直接用这个逻辑向量去取dates里的元素,就完成了筛选。
内容的提问来源于stack exchange,提问作者code123
相关产品推荐
相关产品推荐

