希望它不是重复的,相当难以正确地表达它(相对较新的R)
所以问题是:我想根据行信息使用除某些工作日之外的日期序列。我可以使用bizdays
并动态创建calendar
个对象,但效率很低 - 我希望之前创建它们并根据需要使用它们。另一方面,我不想为可能发生的每一个对象创建一个日历(太多不能打扰,所有工作日加上带/不带假日的版本的组合)。
我可以创建一个数据框,其中包含每行开始/结束日期之间的日期列表,但我需要提供工作日的日历
P <- setDT(R)[, list(ID=ID,
dt=bizseq(Start.Date,End.Date, cal)
), by=1:nrow(R)]
要提供日历,我必须将其定义为
cal <- Calendar(weekdays=c("monday", "tuesday"))
现在是一个可以解释我正在努力解决的问题的工作数据集
> M <-c(0,1,1,0)
> T <- c(1,1,1,0)
> W <- c(0,0,0,1)
> df <- data.frame(M,T,W)
> df$S <-paste0("c",df$M,df$T,df$W)
> udf <- unique(df)
> udf
M T W S
1 0 1 0 c010
2 1 1 0 c110
4 0 0 1 c001
使用udf我想创建一个日历对象列表,然后我可以使用bizseq
传递给get(df$S)
,这是
require(bizdays)
loop or apply?
.... <- Calendar(weekdays=c(ifelse(udf$M==0,"","monday"), ifelse(udf$T==0,"","tuesday"),ifelse(udf$W==0,"","wednesday")))
所以现在正确的问题;)首先 - 这是最好的方法吗?然后如果是这样 - 如何在他们的名字下创建这3个对象(&#34; c101
&#34;等),例如c100
将与星期一匹配日历 - 它不是一个问题如何创建一个日历作为上面的方法工作(它足以用名称替换点),但如果我以动态的方式创建名称,如何创建将成为日历的对象c101
?我可以想象在行中循环,但不知道如何强制将结果对象命名为udf$S
。除非您认为有更好的方法可以从预先创建的对象列表中提供相应日历而不是get()
(对于具有数千个日期和休息日组合的数据框)。
我想基本上最终得到3个名为c010, c110, c001,
的日历对象,但如果扩展表有更多唯一选项来创建所有其他组合,那么在我运行setDT()
函数之前
事后补充:我可以在udf中添加ID并通过索引调用日历,然后将索引返回到df,但我想知道是否可以像我尝试一样创建对象的动态名称
请注意 在Sathish的领导下,我使用了似乎足够的东西:
for(i in 1:nrow(udf)) {
cal <- Calendar(weekdays=c(ifelse(udf[i,1]==0,"","monday"), ifelse(udf[i,2]==0,"","tuesday"),ifelse(udf[i,3]==0,"","wednesday")))
assign(udf[i,4], cal)
}