R 基于行与行之间的时间戳值差异为行分配二进制值

R 基于行与行之间的时间戳值差异为行分配二进制值,r,datetime,timestamp,calculated-columns,R,Datetime,Timestamp,Calculated Columns,我想创建一个新的二进制列,它指示自上一点以来的时间。如果距离上一点小于7000秒,则需要行值1;如果距离上一点超过7000秒,则需要行值0。每一行都有一个POSIXct形式的日期时间戳,但是我已经创建了一个秒向量,如果这使它更容易工作的话 我的数据如下: structure(list(datetime = c("2015/1/06 17:51:17", "2015/1/06 19:51:17", "2015/1/06 21:46:38",

我想创建一个新的二进制列,它指示自上一点以来的时间。如果距离上一点小于7000秒,则需要行值1;如果距离上一点超过7000秒,则需要行值0。每一行都有一个POSIXct形式的日期时间戳,但是我已经创建了一个秒向量,如果这使它更容易工作的话

我的数据如下:

structure(list(datetime = c("2015/1/06 17:51:17", "2015/1/06 19:51:17", 
                            "2015/1/06 21:46:38", "2015/1/06 21:51:18", "2015/1/06 21:56:26", 
                            "2015/1/06 22:1:27", "2015/1/06 22:4:27", "2015/1/06 22:7:27", 
                            "2015/1/06 22:10:27", "2015/1/06 22:15:31", "2015/1/06 22:18:30", 
                            "2015/1/06 22:21:30", "2015/1/06 22:24:39", "2015/1/06 22:27:38", 
                            "2015/1/06 22:31:27", "2015/1/06 22:34:54", "2015/1/06 22:38:57", 
                            "2015/1/06 22:43:6", "2015/1/06 22:48:14", "2015/1/06 22:53:16"
), secs = c(1420566677, 1420573877, 1420580798, 1420581078, 1420581386, 
            1420581687, 1420581867, 1420582047, 1420582227, 1420582531, 1420582710, 
            1420582890, 1420583079, 1420583258, 1420583487, 1420583694, 1420583937, 
            1420584186, 1420584494, 1420584796), lat = c(57.601675, 57.601591, 
                                                         57.602044, 57.603132, 57.6053, 57.608035, 57.609892, 57.612037, 
                                                         57.613997, 57.615203, 57.617153, 57.618842, 57.62074, 57.621673, 
                                                         57.623699, 57.625592, 57.628001, 57.630123, 57.633267, 57.634734
            ), lon = c(-4.034009, -4.033829, -4.036087, -4.039707, -4.043336, 
                       -4.046311, -4.047127, -4.047383, -4.047484, -4.047528, -4.046922, 
                       -4.046935, -4.046753, -4.04651, -4.045886, -4.045272, -4.044616, 
                       -4.044387, -4.044233, -4.042613)), .Names = c("datetime", "secs", 
                                                                     "lat", "lon"), row.names = c(NA, 20L), class = "data.frame")

尝试
库(data.table);setDT(dfN)[,bin:=+(secs shift(secs,fill=secs[1L])<7000)]
1-您的
datetime
不是
POSIXct
类。2-你的秒栏没有任何意义,而且它太大了。3-只需使用
+(c(0,diff(as.POSIXct(df$datetime)))<7000)
就可以了。@akrun谢谢,效果很好。如果N和N-1之间的时间不仅为7000,而且N和N+1之间的时间也为7000,那么有没有办法更进一步,只分配一个值1?@DavidArenburg秒列按顺序是有意义的,因为整个数据集的推断开始时间(1970年)。数字是可靠的。这段代码确实有效,谢谢,但是有没有一种方法可以像上面提到的那样更进一步呢?(仅当N和N-1之间的时间为7000,且N和N+1之间的时间为7000时,才指定值1)将在以后进行检查。