gpt4 book ai didi

r - 使用开始和结束日期按日期范围扩展行

转载 作者:行者123 更新时间:2023-12-03 10:52:02 25 4
gpt4 key购买 nike

考虑以下形式的数据框

       idnum      start        end
1993.1 17 1993-01-01 1993-12-31
1993.2 17 1993-01-01 1993-12-31
1993.3 17 1993-01-01 1993-12-31

startend的类型为 Date
 $ idnum : int  17 17 17 17 27 27
$ start : Date, format: "1993-01-01" "1993-01-01" "1993-01-01" "1993-01-01" ...
$ end : Date, format: "1993-12-31" "1993-12-31" "1993-12-31" "1993-12-31" ...

我想创建一个新的数据框,取而代之的是在 startend(包括边界)之间的每个月的每一行的每月观测值:

所需的输出
idnum       month
17 1993-01-01
17 1993-02-01
17 1993-03-01
...
17 1993-11-01
17 1993-12-01

我不确定 month应该采用哪种格式,我有时会希望按 idnummonth分组以便对其余数据集进行回归。

到目前为止,对于每一行, seq(from=test[1,'start'], to=test[1, 'end'], by='1 month')都会给我正确的顺序-但是,一旦我尝试将其应用于整个数据帧,它将无法正常工作:
> foo <- apply(test, 1, function(x) seq(x['start'], to=x['end'], by='1 month'))
Error in to - from : non-numeric argument to binary operator

最佳答案

使用data.table:

require(data.table) ## 1.9.2+
setDT(df)[ , list(idnum = idnum, month = seq(start, end, by = "month")), by = 1:nrow(df)]

# you may use dot notation as a shorthand alias of list in j:
setDT(df)[ , .(idnum = idnum, month = seq(start, end, by = "month")), by = 1:nrow(df)]
setDTdf转换为 data.table。然后,为每一行 by = 1:nrow(df),根据需要创建 idnummonth

关于r - 使用开始和结束日期按日期范围扩展行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24803361/

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