gpt4 book ai didi

R - 根据开始和结束日期的序列复制行

转载 作者:行者123 更新时间:2023-12-04 10:07:06 29 4
gpt4 key购买 nike

我有一个像这样的数据框“DF”:

Flight.Start   Flight.End   Device      Partner   Creative   Days.in.Flight 
2015-08-31 2015-08-31 Standard MSN Video 35

我需要做的是像这样“炸毁”它:
Flight.Start   Flight.End   Date         Device      Partner   Creative   Days.in.Flight 
2015-08-31 2015-10-04 2015-08-31 Standard MSN Video 35
2015-08-31 2015-10-04 2015-09-01 Standard MSN Video 35
2015-08-31 2015-10-04 2015-09-02 Standard MSN Video 35
2015-08-31 2015-10-04 2015-09-03 Standard MSN Video 35
2015-08-31 2015-10-04 2015-09-04 Standard MSN Video 35
2015-08-31 2015-10-04 2015-09-05 Standard MSN Video 35
2015-08-31 2015-10-04 2015-09-06 Standard MSN Video 35
2015-08-31 2015-10-04 2015-09-07 Standard MSN Video 35

ETC ......直到日期变量达到 2015-10-04,然后继续下一个重复

基本上每一行都会被复制 的数量飞行天数 - 1 (因为已经存在的行可以占间隔中的一天,然后为该航类内的相关日期填写一个新列“日期”。因此,如果一行的开始日期和结束日期为 9/分别为 1 和 9/5,将 4 个重复的行附加到已经存在的行上,将创建一个新列(日期),并且原始行的任何航类开始和结束日期的日期序列将填写列值。

所有日期值都被格式化为日期,飞行天数是一个数字,其余的是因子。

编辑

针对重复的问题标记:

澄清一下,这不像被标记为重复的情况,因为我的问题并不是真正关注如何根据飞行天数进行复制(我已经知道如何做到这一点!),而是我如何才能做到这一点将列添加到该输出数据框中,并在相应的飞行周期内依次插入日期。谢谢楼上...

最佳答案

这是 splitstackshape 的一种方式和 dplyr .使用 expandRows()来自 splitstackshape包,您可以按照您的描述扩展您的数据框。然后,您想使用 mutate() 添加一系列日期.我所做的是通过Flight.Start的组合对数据进行分组。和 Flight.End ,并使用 seq()为每个组创建一个日期序列。 first()正在取 Flight.Start 的第一个元素和 Flight.End .这样,您就可以创建您想要的序列。我希望这能帮到您。

数据和代码

mydf <- data.frame(Flight.Start = as.Date(c("2015-09-01", "2015-09-10")),
Flight.End = as.Date(c("2015-09-03", "2015-09-15")),
Device = "Standard",
Creative = "Video",
Days.in.Flight = c(3, 6),
stringsAsFactors = FALSE)

# Flight.Start Flight.End Device Creative Days.in.Flight
#1 2015-09-01 2015-09-03 Standard Video 3
#2 2015-09-10 2015-09-15 Standard Video 6

library(splitstackshape)
library(dplyr)

expandRows(mydf, "Days.in.Flight", drop = FALSE) %>%
group_by(Flight.Start, Flight.End) %>%
mutate(Date = seq(first(Flight.Start),
first(Flight.End),
by = 1))

# Flight.Start Flight.End Device Creative Days.in.Flight Date
# (date) (date) (chr) (chr) (dbl) (date)
#1 2015-09-01 2015-09-03 Standard Video 3 2015-09-01
#2 2015-09-01 2015-09-03 Standard Video 3 2015-09-02
#3 2015-09-01 2015-09-03 Standard Video 3 2015-09-03
#4 2015-09-10 2015-09-15 Standard Video 6 2015-09-10
#5 2015-09-10 2015-09-15 Standard Video 6 2015-09-11
#6 2015-09-10 2015-09-15 Standard Video 6 2015-09-12
#7 2015-09-10 2015-09-15 Standard Video 6 2015-09-13
#8 2015-09-10 2015-09-15 Standard Video 6 2015-09-14
#9 2015-09-10 2015-09-15 Standard Video 6 2015-09-15

关于R - 根据开始和结束日期的序列复制行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33181287/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com