【发布时间】:2019-06-04 14:52:11
【问题描述】:
我查看了 stackoverflow 并看到了我需要的不同变体,但没有一个我可以为我工作。
我有一大组数据,包括 116 列和 326438 行。
我需要将每一行拆分为两行,使用现有的日期字段作为计算,并添加新的日期列“StartDate”和“EndDate”。
如果第 1 行显示 PolicyEffectiveDate 为 01/06/2018,PolicyRenewalDate 为 01/06/2019,我需要数据反映两行,其中包含以下内容:
第一行将显示 01/06/2018 的开始日期和 2018 年 12 月 31 日的结束日期,下一行将显示 2019 年 1 月 1 日的开始日期和 2019 年 5 月 31 日的结束日期。 StartDate 和 EndDate 是在此过程中创建的新列。新行上的所有其他数据都应与第一个条目匹配,实际上我们正在创建 1 中的两行,除了要创建的两个新字段之外,所有数据都匹配。
我目前拥有的是这样的:
PolicyEffectiveDate PolicyRenewalDate Customer
2017-06-01 2018-06-01 Arc Ltd
2017-04-03 2018-04-03 Windonian CC
我需要的是这个:
PolicyStartDate PolicyEndDate Customer
2017-06-01 2017-12-31 Arc Ltd
2018-01-01 2018-05-31 Arc Ltd
2017-04-03 2017-12-31 Windonian CC
2018-01-01 2018-04-02 Windonian CC
制作这两个示例df的代码是:
mydf <- data.frame(PolicyEffectiveDate = as.Date(c("2017-06-01", "2017-04-03")),
PolicyRenewalDate = as.Date(c("2018-06-01", "2018-04-03")),
Customer = as.character(c("Arc Ltd", "Windonian CC")),
stringsAsFactors = FALSE)
newdf <- data.frame(PolicyStartDate = as.Date(c("2018-06-01", "2019-01-01","2017-04-03", "2018-01-01")),
PolicyEndDate = as.Date(c("2018-12-31", "2019-05-31","2017-12-31", "2018-04-02")),
Customer = as.character(c("Arc Ltd","Arc Ltd", "Windonian CC","Windonian CC")),
stringsAsFactors = FALSE)
【问题讨论】:
-
2017-06-01 2017-10-20 Arc Ltd如果你有这样的一行怎么办?由于开始和结束在一年内,这将保持不变?还是永远不会这样,政策总是至少相隔一年?另外,如果你有2017-06-01 2019-09-10 Arc Ltd,那将是 3 行? -
嗨,这是一个很好的问题。对于此数据集,该条目的长度通常为一年。可以有更短的期限,但这种情况很少见,应该由我正在使用数据执行的其他工作中提取。我想唯一真正的例外是从 1 月 1 日开始的情况,在这种情况下,只有一行是正确的。
标签: r date split rows generate