假期至假期前最后一天计算的班次金额(单位:R)

假期至假期前最后一天计算的班次金额(单位:R),r,R,假设我有这样一个data.frame: df <- data.frame(Day = c("2020-21-12", "2020-22-12", "2020-23-12", "2020-24-12","2020-25-12"), Amount = c(1000, 1000, 1000, 1000, 1000), Holiday=(0,0,0,1,1)) df_output <- da

假设我有这样一个data.frame:

df <- data.frame(Day = c("2020-21-12", "2020-22-12", "2020-23-12", "2020-24-12","2020-25-12"), Amount = c(1000, 1000, 1000, 1000, 1000), Holiday=(0,0,0,1,1))
df_output <- data.frame(Day = c("2020-21-12", "2020-22-12", "2020-23-12", "2020-24-12","2020-25-12"), Amount = c(1000, 1000, 3000, 0, 0), Holiday=(0,0,0,1,1))

df正在运行的代码,我将尝试对其进行一些改进。
我给出了一个较长的示例来正确验证它


df正在运行的代码,我将尝试对其进行一些改进。
我给出了一个较长的示例来正确验证它


df以下是一种
dplyr
方式:

library(tidyverse)

df <- data.frame( Day = c("2020-21-12", "2020-22-12", "2020-23-12", "2020-24-12","2020-25-12","2020-26-12","2020-27-12","2020-28-12","2020-29-12"), 
                  Amount = c(1000, 1000, 1000, 1000, 1000, 1000, 1000,1000,1000),
                  Holiday=c(0,0,0,1,1,0,1,0,1))


 df %>% 
   arrange(desc(Day)) %>%
   mutate(lagsum = ifelse(lag(Holiday, default = 0) == 1, 
                   Amount + lag(Amount, default = 0), 
                   Amount)) %>%
  mutate(Amount2 = ifelse(Holiday == 0 & lag(Holiday) == 1, 
                   Amount + dplyr::lag(lagsum, default = 0),
                   Amount),
        Amount2 = ifelse(Holiday == 1, 0, Amount2)) %>%
   arrange(Day) %>%
   select(Day, Amount = Amount2, Holiday)
  

        Day Amount Holiday
1 2020-21-12   1000       0
2 2020-22-12   1000       0
3 2020-23-12   3000       0
4 2020-24-12      0       1
5 2020-25-12      0       1
6 2020-26-12   2000       0
7 2020-27-12      0       1
8 2020-28-12   2000       0
9 2020-29-12      0       1
库(tidyverse)
df%
安排(说明(日))%>%
突变(lagsum=ifelse)(滞后(假日,默认值=0)=1,
金额+滞后(金额,默认值=0),
金额%)%>%
突变(数量2=ifelse(假日==0和滞后(假日)==1,
Amount+dplyr::lag(lagsum,默认值=0),
金额),
金额2=ifelse(假日==1,0,金额2))%>%
安排(天)%>%
选择(天,金额=金额2,假日)
日数假期
1 2020-21-12   1000       0
2 2020-22-12   1000       0
3 2020-23-12   3000       0
4 2020-24-12      0       1
5 2020-25-12      0       1
6 2020-26-12   2000       0
7 2020-27-12      0       1
8 2020-28-12   2000       0
9 2020-29-12      0       1

以下是一种
dplyr
方式:

library(tidyverse)

df <- data.frame( Day = c("2020-21-12", "2020-22-12", "2020-23-12", "2020-24-12","2020-25-12","2020-26-12","2020-27-12","2020-28-12","2020-29-12"), 
                  Amount = c(1000, 1000, 1000, 1000, 1000, 1000, 1000,1000,1000),
                  Holiday=c(0,0,0,1,1,0,1,0,1))


 df %>% 
   arrange(desc(Day)) %>%
   mutate(lagsum = ifelse(lag(Holiday, default = 0) == 1, 
                   Amount + lag(Amount, default = 0), 
                   Amount)) %>%
  mutate(Amount2 = ifelse(Holiday == 0 & lag(Holiday) == 1, 
                   Amount + dplyr::lag(lagsum, default = 0),
                   Amount),
        Amount2 = ifelse(Holiday == 1, 0, Amount2)) %>%
   arrange(Day) %>%
   select(Day, Amount = Amount2, Holiday)
  

        Day Amount Holiday
1 2020-21-12   1000       0
2 2020-22-12   1000       0
3 2020-23-12   3000       0
4 2020-24-12      0       1
5 2020-25-12      0       1
6 2020-26-12   2000       0
7 2020-27-12      0       1
8 2020-28-12   2000       0
9 2020-29-12      0       1
库(tidyverse)
df%
安排(说明(日))%>%
突变(lagsum=ifelse)(滞后(假日,默认值=0)=1,
金额+滞后(金额,默认值=0),
金额%)%>%
突变(数量2=ifelse(假日==0和滞后(假日)==1,
Amount+dplyr::lag(lagsum,默认值=0),
金额),
金额2=ifelse(假日==1,0,金额2))%>%
安排(天)%>%
选择(天,金额=金额2,假日)
日数假期
1 2020-21-12   1000       0
2 2020-22-12   1000       0
3 2020-23-12   3000       0
4 2020-24-12      0       1
5 2020-25-12      0       1
6 2020-26-12   2000       0
7 2020-27-12      0       1
8 2020-28-12   2000       0
9 2020-29-12      0       1

如果您同意我的回答,我将非常高兴。注意其他答案,并用我的长例子验证它。如果你同意我的答案,我会很高兴的。注意其他答案,并用我的较长示例验证。@polkas谢谢您的参考,我编辑了code@polkas谢谢你的参考,我编辑了代码