Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.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根据另一个datetime变量按组填充datetime数据_R_Datetime_Data.table_Grouping_Padding - Fatal编程技术网

R根据另一个datetime变量按组填充datetime数据

R根据另一个datetime变量按组填充datetime数据,r,datetime,data.table,grouping,padding,R,Datetime,Data.table,Grouping,Padding,我有一个包含POSIXct datetime(t1)数据的数据表,它由多个列组成。对于每个组,我的数据应该有48行,间隔半小时(总共24小时),其日期时间(t1)值由另一个用作分组变量的日期时间(t2)变量确定。48行(t1)数据应为分组日期时间(t2)之前的24小时半小时间隔 我需要用每个组的上一(按时间顺序)完整数据行中的值填充缺少的行 例如:如果按ID=A分组的数据,则datetime(t2)=10-01-2019 06:00:00(格式='dd-mm-yyyy hh:mm:ss')具有从

我有一个包含POSIXct datetime(t1)数据的数据表,它由多个列组成。对于每个组,我的数据应该有48行,间隔半小时(总共24小时),其日期时间(t1)值由另一个用作分组变量的日期时间(t2)变量确定。48行(t1)数据应为分组日期时间(t2)之前的24小时半小时间隔

我需要用每个组的上一(按时间顺序)完整数据行中的值填充缺少的行

例如:如果按ID=A分组的数据,则datetime(t2)=10-01-2019 06:00:00(格式='dd-mm-yyyy hh:mm:ss')具有从09-01-2019 08:00:0010-01-2019 04:00:00的datetime(t1)数据。它的范围应为从09-01-2019 06:00:0010-01-2019 05:30:00,这意味着从一开始就缺少4行数据(2小时),从一结束就缺少3行数据,可用数据点之间也缺少几行数据。虽然在时间段开始时缺少的行不能用完整的数据填充,但我仍然希望将这些行作为NA添加到表中。但是,使用上一个完整数据行中的完整数据填充表末尾的行是非常重要的

我的数据集示例如下所示:(按ID和t2分组)


不清楚时间是否为24小时格式。您可以先创建一个半小时计时序列,然后在使用
zoo::na.locf
进行最后一次观察之前加入原始数据集:

数据:


我的数据的分组变量实际上是ID和t2。当我用稍微不同的数据(包括不同的t2值)尝试您的代码,并将数据表更新为“by=(ID,t2)”,它返回了预期的行数,t1的正确值,但t2的值不正确:它们都与t2的第一个值相同。使用数据:DT,我将代码调整为:DT[DT[,(t1=rev(seq(t2[1L]-30*60,length.out=48L,by=“-30分钟”)),by=(ID,t2)],(ID=i.ID,t2=i.t2,t1=i.t1,varX=na.locf(varX,na.rm=FALSE),varY=na.locf(varY,na.rm=FALSE)),on=(ID,t2,t1)]但是varX和varY的值将被带入下一个组,而不是从NA值开始的下一个组,直到该组的第一个完整数据行出现为止。@Michael96我用新的样本数据集更新了代码。您可能希望在OP中发布此样本数据集,因为它更清晰
ID t2                   t1                    varX   varY
... 
A  10-01-2019 06:00:00  10-01-2019 12:00:00   100    Y1 
A  10-01-2019 06:00:00  10-01-2019 12:30:00   60     Y2 
B  10-01-2019 06:00:00  10-01-2019 01:00:00   100    Y2 
A  10-01-2019 06:30:00  10-01-2019 01:30:00   100    Y3 
B  10-01-2019 06:30:00  10-01-2019 02:00:00   200    Y4  
C  10-01-2019 07:00:00  10-01-2019 04:00:00   100    Y3  
library(data.table)
DT <- fread("ID,t2,t1,varX,varY
A,10-01-2019 06:00:00 PM,10-01-2019 12:00:00 PM,100,Y1 
A,10-01-2019 06:00:00 PM,10-01-2019 12:30:00 PM,60,Y2 
B,10-01-2019 06:00:00 PM,10-01-2019 01:00:00 PM,100,Y2 
A,10-01-2019 06:30:00 PM,10-01-2019 01:30:00 PM,100,Y3 
B,10-01-2019 06:30:00 PM,10-01-2019 02:00:00 PM,200,Y4 
C,10-01-2019 07:00:00 PM,10-01-2019 04:00:00 PM,100,Y3") 
cols <- c("t2", "t1")
DT[, (cols) := lapply(.SD, as.POSIXct, format="%d-%m-%Y %I:%M:%S %p"), .SDcols=cols]
library(zoo)
DT[DT[,.(t1=rev(seq(t2-30*60, length.out=48L, by="-30 mins"))), by=.(ID, t2)],
    .(ID=i.ID, t2=i.t2, t1=i.t1, varX=varX, varY=varY),
    on=.(ID, t2, t1)][,
        c("varX", "varY") := lapply(.SD, na.locf, na.rm=FALSE),
        , by=.(ID, t2), .SDcols=c("varX", "varY")][]