R中的日历(再次)操作

亨利

我有这样的代码:

today<-as.Date(Sys.Date())
spec<-as.Date(today-c(1:1000))
df<-data.frame(spec)
stage.dates<-as.Date(c('2015-05-31','2015-06-07','2015-07-01','2015-08-23','2015-09-15','2015-10-15','2015-11-03'))
stage.vals<-c(1:8)
stagedf<-data.frame(stage.dates,stage.vals)
df['IsMonthInStage']<-ifelse(format(df$spec,'%m')==(format(stagedf$stage.dates,'%m')),stagedf$stage.vals,0)

这产生了不正确的输出,即

df.spec, df.IsMonthInStage
2013-05-01, 0
2013-05-02, 1
2013-05-03, 0
....
2013-05-10, 1

它似乎正在循环播放,因此stage.dates为8长,并且每8位重复一次“ TRUE”匹配。我该如何解决这个问题,以便它将在阶段val的整个月内标记为1?

还是为了获得奖励声望-如何设置它,以便在不同的stage.dates之间填充最近阶段的1、2、3等?

例如:

5月31日至6月7日将填充1,6月7日至7月1日将填充2,依此类推,11月3日至5月30日将填充8?

谢谢

编辑:

我赞赏后者在功能上与前一个问题有所不同。我最终试图达到两者(出于不同的原因),因此感谢所有回答

达瓦尔·卡皮尔(Dhawal Kapil)

看看是否可行。

根据将数据stage.dates视为存储桶来剪切和拆分数据你不需要stage.vals在这里顺便说一句

切分

data<-split(df, cut(df$spec, stagedf$stage.dates, include.lowest=TRUE))

这应该给你名单data.frame分裂为每stage.dates

现在mutate您的数据带有索引..这就是您stage.vals要的

变异

data<-lapply(seq_along(data), function(index) {mutate(data[[index]],
IsMonthInStage=index)})

现在使用ldply将数据框添加到列表中

加入

data=ldply(data)

但是,这将给出您可以安排的日期或订购日期

种类

arrange(data,spec)

最终输出

data[1:10,]
         spec IsMonthInStage
1  2015-05-31              1
2  2015-06-01              1
3  2015-06-02              1
4  2015-06-03              1
5  2015-06-04              1
6  2015-06-05              1
7  2015-06-06              1
8  2015-06-07              2
9  2015-06-08              2
10 2015-06-09              2

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章