![](/img/trans.png)
[英]Select data based on a day in a month, "If date is lesser than a day in a month"
[英]Select a time period by day and month
我有一個按年份組織的數據框。 例如:date <-seq(as.Date(“ 2001-07-20”),as.Date(“ 2010-12-31”),by = 1)
現在,我想使用兩個時間段選擇一個子集:2004-2008年的6月23日至7月13日以及7月20日至8月9日。 你能提供一些線索嗎? 謝謝!
是的,可以通過以下方法解決:test [date%between%c(“ 2004-07-20”,“ 2004-08-09”)] ...但是我的數據中有很多年,代碼可能非常重復。 我想知道是否可以像這樣解決:
df $ md <-format(as.Date(df $ date),“%m-%d”)df <-df [df $ md%in%c(as.Date(06-23):Date(07- 13),日期(07-20):日期(08-09))和年份%in%(2004:2008),]
它不起作用:as.Date.numeric(6-23)中的錯誤:必須提供'origin'
您可以構建興趣范圍和子集:
library(lubridate)
date <- seq(as.Date("2001-07-20",origin="1970-01-01"),as.Date("2010-12-31",origin="1970-01-01"),by = 1)
range1 <- as.Date(unlist(lapply(c(0:4),function(y) seq(as.Date("2004-06-23",origin="1970-01-01"),as.Date("2004-07-13",origin="1970-01-01"),by="1 day") + years(y))),origin="1970-01-01")
range2 <- as.Date(unlist(lapply(c(0:4),function(y) seq(as.Date("2004-07-20",origin="1970-01-01"),as.Date("2004-08-09",origin="1970-01-01"),by="1 day") + years(y))),origin="1970-01-01")
date[date %in% range1 | date %in% range2]
在OP中使用%between%的替代答案
library(lubridate)
dates <- seq(as.Date("2001-07-20"),as.Date("2010-12-31"),by = 1)
r1 <- c(as.Date("2004-06-23"),as.Date("2004-07-13"))
r2 <- c(as.Date("2004-07-20"),as.Date("2004-08-09"))
ranges <- lapply(c(0:4),function(y) list(r1=r1 + years(y),r2=r2+years(y)))
as.Date(unlist(lapply(ranges,function(r) { dates[dates %between% r$r1 | dates %between% r$r2] })))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.