Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/64.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 将持续时间分成年度部分_R_Date_Lubridate - Fatal编程技术网

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日创建