遍历日期返回null

时间:2019-04-22 16:24:36

标签: r

Actual Output,如果一列日期(z)落在指定范围内,我试图求和。不幸的是,我的循环似乎无法启动,并且输出为空。

 Sd <- as.Date('2017-01-01',tz = "GMT")
 EndDate <- as.Date('2017-01-20',tz = "GMT")
 Ed <- EndDate + 30

 LTV1 <- while (Sd < Ed) {


 Sd <- Sd + 1
 LTV1 <- LTV %>% group_by(InstallationDate)%>% filter(z < Sd) %>% 
 summarize(Amount = sum(USAmount))


 }

 as.data.frame(LTV1)

向大家道歉。我对此很陌生。这是一个可重现的示例:

  Sample <- as.data.frame(seq(as.Date("2017/01/01"), by = "day", length.out 
  = 15))
  Sample$Amount <- c(10,5,3,4,8,65,89,47,74,95,85,63,32,45,32)



  colnames(Sample)[1] <- "date"

  Sd <- as.Date('2017-01-01',tz = "GMT")
  EndDate <- as.Date('2017-01-5',tz = "GMT")
  Ed <- EndDate + 3

  Sample1 <- while (Sd < Ed) {


  Sd <- Sd + 1
  Sample1 <- Sample %>% group_by(date)%>% filter(date < Sd) %>% 
  summarize(Amount = sum(Amount))


  }

  as.data.frame(Sample1)


 Desired Output will be:
 Dates: Day 1    Day 2   Day 3 .......................
 Amount: 25       54      89   .......................

2 个答案:

答案 0 :(得分:0)

我想这就是你想要的:

LTV1 = LTV %>% 
   arrange(InstallationDate) %>%
   group_by(InstallationDate) %>%
   summarize(daily_amount = sum(USAmount)) %>%
   ungroup() %>%
   mutate(cumulative_amount = cumsum(daily_amount))

我相信cumulative_amount列就是您要创建的内容-尽管您难以复制和共享输入数据,但很难说也无法测试。我也无法判断是否需要arrangegroup_bysummarize-如果按日期排序您的数据,则不需要arrange 。如果您的数据每天只有一行,则不需要分组和汇总。

答案 1 :(得分:-1)

您将LTV1的结果分配给while(为什么?),该结果始终为NULL。