我有一个像这样的数据框“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 ......直到Date变量达到2015-10-04,然后继续下一个重复
基本上每一行都会被 days in flight - 1 的数量复制(因为已经存在的行可以在该时间间隔内占一天,然后为该航班中的相关日期填写一个新列"Date" . 所以如果一行有分别为9/1和9/5的开始和结束日期,4个重复行将附加到已存在的行,将创建新列(日期),以及航班开始和结束日期的日期顺序是对于原始行将填写列值 .
所有日期值都格式化为日期,飞行天数为num,其余为因子 .
EDIT
响应重复的问题标记:
为了澄清,这不像被标记为重复的情况,因为我的问题并没有真正关注如何根据飞行天数复制(我已经知道如何做到了!),而是我怎么能那么将列添加到该输出数据框并在相应的航班期间内依次插入日期 . 谢谢你的抬头......
3 回答
这是基础R的一种方法:
这是
splitstackshape
和dplyr
的一种方法 . 使用splitstackshape
包中的expandRows()
,您可以按照所述扩展数据框 . 然后,您想使用mutate()
添加一系列日期 . 我所做的是通过Flight.Start
和Flight.End
的组合对数据进行分组,并使用seq()
为每个组创建一个日期序列 .first()
正在获取Flight.Start
和Flight.End
的第一个元素 . 通过这种方式,您可以创建所需的序列 . 我希望这能帮到您 .DATA and CODE
或者使用
data.table
,我们将'data.frame'转换为'data.table'(setDT(mydf)
),按'Days.in.Flight'复制行序列,根据该索引,我们将数据集(.SD[rep(...
)分组,按'Flight.Start'分组,'Flight.End',我们创建'Date'列 .