R 将持续时间分成年度部分
问题: 我有一个数据帧,它由案例(列:R 将持续时间分成年度部分,r,date,lubridate,R,Date,Lubridate,问题: 我有一个数据帧,它由案例(列:case)的持续时间(列:begin和end)组成。有些持续时间长达两年。我需要将这些案例分为年度持续时间:一部分持续到年底,另一部分持续到明年 目前的做法: 我设法计算了这些持续时间(见下面的当前方法),但我无法将相应的行拆分为多个行,同时不影响年度案例 下面是一个可复制的示例: #包 图书馆(tidyverse) 图书馆(lubridate) #可复制示例 df#A tibble:4 x 4 #>案件起止原因 #> #>1
case
)的持续时间(列:begin
和end
)组成。有些持续时间长达两年。我需要将这些案例分为年度持续时间:一部分持续到年底,另一部分持续到明年
目前的做法:
我设法计算了这些持续时间(见下面的当前方法),但我无法将相应的行拆分为多个行,同时不影响年度案例
下面是一个可复制的示例:
#包
图书馆(tidyverse)
图书馆(lubridate)
#可复制示例
df#A tibble:4 x 4
#>案件起止原因
#>
#>1 2019-12-20 2020-01-15 X
#>21 2019-08-05 2019-08-20 Y
#>2012-01-01 2012-01-12 X
#>4 3 2014-10-10 2015-01-15 Y
#目标(分割持续时间并使其“更长”)
目标#A tible:6 x 4
#>案件起止原因
#>
#>1 2019-12-20 2019-12-31 X
#>212020-01-012020-01-15X
#>2011年8月5日2019年8月20日
#>42 2012-01-01 2012-01-12 X
#>5 3 2014-10-10 2014-12-31 Y
#>6.3 2015-01-01 2015-01-15 Y
#当前方法
df%>%
突变(结束年=如果其他(开始年)!=年(结束),
上限日期(ymd(开始),“年”)-天(1),结束,
开始年=如果年(开始)!=年(结束),
上限日期(ymd(结束),“年”,开始)
#>#tibble:4 x 6
#>案例开始结束原因结束年开始年
#>
#>1 2019-12-20 2020-01-15 X 2019-12-31 2021-01-01
#>21 2019-08-05 2019-08-20 Y 2019-08-20 2019-08-05
#>2012-01-01 2012-01-12 X 2012-01-12 2012-01-01
#>4.3 2014-10-10 2015-01-15 Y 2014-12-31 2016-01-01
如果您能为我提供解决方案,我将不胜感激。提前谢谢
根据艾伦·卡梅隆的回答编辑:
#最终解决方案
图书馆(tidyverse)
图书馆(lubridate)
#可复制示例
df%
变异(开始=上限\日期(ymd(开始),“年”),开始)
#
df%
突变(end=if_else)(year(end)!=year(begin),
上限日期(ymd(开始),“年”)-天(1),结束)
#合并
df%
绑定_行(df2)%>%
安排(情况、理由)
头部(df)
#>#tibble:6 x 4
#>案件起止原因
#>
#>1 2019-12-20 2019-12-31 X
#>212020-01-012020-01-15X
#>2011年8月5日2019年8月20日
#>42 2012-01-01 2012-01-12 X
#>5 3 2014-10-10 2014-12-31 Y
#>6.3 2015-01-01 2015-01-15 Y
您不能使用mutate
使数据变长
在base R语法中,通过复制桥接一年的条目,然后在将副本连接回原始数据帧之前,使用lubridate函数根据需要控制月份和日期,可能最容易说明如何实现这一点
bridgers 6 3 2015-01-01 2015-01-15 Y
由(v0.3.0)于2020年3月24日创建