gpt4 book ai didi

r - 展开 data.table 中的日期

转载 作者:行者123 更新时间:2023-12-03 22:27:47 24 4
gpt4 key购买 nike

这个问题在这里已经有了答案:





Expand rows by date range using start and end date

(5 个回答)


4年前关闭。




我目前有一个问题,我有一个包含开始和结束日期以及 ID 的数据表。新表应该具有相同的 ID 和一列日期,包含第一天和最后一天之间的一系列天数,每行一天,即

old.table
ID first.date last.date
1 2001-01-01 2001-01-03
2 2002-02-01 2002-02-04

new table
ID date
1 2001-01-01
1 2001-01-02
1 2001-01-03
2 2002-02-01
2 2002-02-02
2 2002-02-03
2 2002-02-04

我知道,那个呼唤
seq(first.date,last.date,"day")

创建这样一个序列。然而,调用
old.table[,date := seq(first.date,last.date,"day")])

抛出异常
 Error in seq.Date(first.date, last.date, "day") : 
'from' must be of length 1

这意味着,不可能对输入进行矢量化(至少不是这样)。

有没有办法获得所需的解决方案?

最佳答案

seq只接受 from 中的一个元素和 to , 我们可以按 'id' 分组(如果没有重复)然后做 seq

setDT(old.table)[, .(date = seq(first.date, last.date, by = '1 day')), by = ID]  
# ID date
#1: 1 2001-01-01
#2: 1 2001-01-02
#3: 1 2001-01-03
#4: 2 2002-02-01
#5: 2 2002-02-02
#6: 2 2002-02-03
#7: 2 2002-02-04

如果“ID”也重复,则按行顺序分组
setDT(old.table)[, .(date = seq(first.date, last.date, by = '1 day')), 
by = .(ID, ID2 = seq_len(nrow(old.table)))]

关于r - 展开 data.table 中的日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43706729/

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