假期至假期前最后一天计算的班次金额(单位:R)
假设我有这样一个data.frame:假期至假期前最后一天计算的班次金额(单位: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
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谢谢你的参考,我编辑了代码