R语言如何用向量筛选数据框子集?月度末时间序列筛选报错求助
解决时间序列筛选每月最后一天的匹配警告问题
嘿,这个警告我太熟啦!其实问题出在你用==来比较两个长度不一样的向量上——当realized$date的长度和last向量长度不匹配时,R会循环重复短向量去匹配长向量,这就会触发那个“longer object length is not a multiple of shorter object length”的警告,而且筛选结果大概率是错的。
给你两个靠谱的解决办法:
方法一:直接判断日期是否为当月最后一天(不用提前生成last向量)
借助lubridate包的函数,不用额外生成每月最后一天的向量,直接在筛选条件里判断:
library(lubridate) # 方式1:用rollforward函数,roll_to_first=FALSE表示取当月最后一天 realized <- subset(realized, date == rollforward(date, roll_to_first = FALSE)) # 方式2:计算当月第一天+当月天数-1 realized <- subset(realized, date == floor_date(date, "month") + days_in_month(date) - 1)
方法二:用%in%替代==(如果你已经生成了last向量)
%in%是检查元素是否属于某个集合,不管两个向量长度是否一致,这才是你需要的匹配逻辑:
# 把==换成%in%就搞定了 realized <- subset(realized, date %in% last)
举个你提到的简单例子类比:如果x <- c(1,2,3,4,5,6,7,8,9,10,11,12),y <- c(2,4,6,8),用x == y会触发同样的警告,但用x %in% y就能正确筛选出x里属于y的元素c(2,4,6,8)。
内容的提问来源于stack exchange,提问作者Novic
相关产品推荐
相关产品推荐

