如果报表中的日期为R-每年概化

如果报表中的日期为R-每年概化,r,date,if-statement,R,Date,If Statement,我从以下问题开始寻找泛化性质: 我的解决方案基于@rawr在上述问题中发布的解决方案: 间隔的函数: `%between%` <- function(x, interval) x >= interval[1] & x <= interval[2] `%between%`=interval[1]&x您可以将日期格式化为%m-%d并使用字符串比较 df$value <- as.numeric(format(df$date, '%m-%d') %between% c(

我从以下问题开始寻找泛化性质:

我的解决方案基于@rawr在上述问题中发布的解决方案:

间隔的函数:

`%between%` <- function(x, interval) x >= interval[1] & x <= interval[2]

`%between%`=interval[1]&x您可以将日期格式化为
%m-%d
并使用字符串比较

df$value <- as.numeric(format(df$date, '%m-%d') %between% c('07-15', '12-31'))
df
#         date value
# 1 2015-04-16     0
# 2 2014-08-04     1
# 3 2013-09-11     1
# 4 2015-11-20     1
# 5 2014-04-04     0

df$value
df$leappyear您的for循环只运行了1次。正确的语句应该是:
for(i in 1:length(begi))
。有关解决此问题的更好方法,请参见下面的答案。
格式(as.Date('2018-07-15'),%j”)>196
返回
FALSE
。如果将其更改为
=
,它将返回
TRUE
,但随后
格式(截至日期('2016-07-14'),“%j”)>=196
将返回
TRUE
。所以这个方法对闰年不起作用,甚至没想过闰年。有趣的点@RyanD.It应该返回一个真/假语句向量,指示满足此条件的行<代码>>
在提供的数据集上工作,但显然可以使用任何操作数,我不相信这是重点。实际上你完全正确!我完全忽略了闰年。这应该是可行的:
df[format(df$date,“%j”)>ifelse(as.integer(format(df$date,“%Y”))%%4==0197196),]
`%between%` <- function(x, interval) x >= interval[1] & x <= interval[2]
begi <- as.Date(sprintf('%s-07-15',1993:2018))

# Vector with all the possible intervals
dates <- as.Date(c(sprintf('%s-07-15',1993:2018), sprintf('%s-12-31',1993:2018))) 
df$value <- NA

for (i in length(begi)) {
  ind<-which(format(df$date,"%Y") == format(begi[i], "%Y"))
  df$value[ind] <- 1*(df$date[ind] %between% as.Date(c(begi[i], 
                dates[i+length(begi)])))
}
df$value <- as.numeric(format(df$date, '%m-%d') %between% c('07-15', '12-31'))
df
#         date value
# 1 2015-04-16     0
# 2 2014-08-04     1
# 3 2013-09-11     1
# 4 2015-11-20     1
# 5 2014-04-04     0
df$leapyear <- ifelse(as.integer(format(df$date, "%Y")) %% 4 == 0, 1, 0)
df$leapyear <- ifelse(as.integer(format(df$date, "%Y")) %% 100 == 0, 0, 1)
df$leapyear <- ifelse(as.integer(format(df$date, "%Y")) %% 400 == 0, 1, 0)

df[format(df$date, "%j") > ifelse(df$leapyear == 0, 197, 196), ]