我的数据看起来像这样。我计算了入住日期和退房日期之间的差,以获取天数,并根据天数将“值”划分为各个日期。对于前。 ID 3222808停留了2天,所以我将值458/2除以并将其分配给每个日期。我如何在R或Excel中做到这一点。
ID值签入签出3222808 458 11/15/2019 11/17/2019606203 238 10/28/2019 10/30/2019334229 218 11/16/2019 11/18/2019837066 218 11/16/2019 11/18/2019620384 218 11/16/2019 11/18/2019534690 218 11/16/2019 11/18/20193192449 298 11/16/2019 11/18/2019
输出应类似于-ID值日期3222808 229 11/15/20193222808 229 11/16/2019
我当前正在使用的代码给我这个-
library(dplyr)
pm <- df %>%
rowwise() %>%
do(data.frame(.[1:2], date = seq(.$Checkin, .$Checkout, by = "1 day")))
赞助人起息日
3222808 458 11/15/20193222808 458 11/16/20193222808 458 11/17/2019606203 238 2019年10月28日606203 238 2019年10月29日606203 238 2019年10月30日334229 218 11/16/2019
从这里开始,我不知道如何将它们分组并划分金额。
此答案的主要驱动因素是pivot_longer()
中的tidyr
:
df %>%
mutate(number_days = interval(Checkin, Checkout) %>%
as.duration() %>%
as.numeric("days")) %>%
pivot_longer(c(Checkin, Checkout), names_to = "names", values_to = "Date") %>%
mutate_at("Value", ~(Value / number_days)) %>%
select(ID, Value, Date)
# A tibble: 14 x 3
ID Value Date
<int> <dbl> <date>
1 3222808 229 2019-11-15
2 3222808 229 2019-11-17
3 606203 119 2019-10-28
4 606203 119 2019-10-30
5 334229 109 2019-11-16
6 334229 109 2019-11-18
7 837066 109 2019-11-16
8 837066 109 2019-11-18
9 620384 109 2019-11-16
10 620384 109 2019-11-18
11 534690 109 2019-11-16
12 534690 109 2019-11-18
13 3192449 149 2019-11-16
14 3192449 149 2019-11-18