识别GPS数据中的24小时周期

时间:2015-02-17 20:19:59

标签: r

我想识别GPS数据中的连续24小时时段。我有一个数字的日期时间列(例如:41422.29),我知道每个舍入的数字是一天。我知道如何得到这一天(只是圆形),但我的日程安排并没有特别关注日子。相反,我特别希望识别距离第一列24小时内的所有列,然后从那里开始。我不能使用列数,因为24小时不会分成相等的增量。

这是我的逻辑到目前为止,虽然它不能让我到达我需要的地方:

for (i in 1:length(example)){
base<-round(example$DT_LMT[i], digits=0)  
if(example$DT_LMT[i]<=base+1) {
    example$DaySeq<-base
  }
  else {
    base+1
  }
}  

我有一个虚拟数据集示例,我想要的那种:

structure(list(ID = 1:19, DT_LMT = c(41423.62517, 41423.79236, 
41423.95868, 41424.12534, 41424.29203, 41424.45888, 41424.62535, 
41424.79186, 41424.95852, 41425.12502, 41425.29185, 41425.75016, 
41425.79201, 41425.83352, 41425.87534, 41425.91744, 41425.95868, 
41426.00105, 41426.04257), NEED = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 
2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L)), .Names = c("ID", 
"DT_LMT", "NEED"), class = "data.frame", row.names = c(NA, -19L
))     

2 个答案:

答案 0 :(得分:3)

这是一种方法,假设df是您问题中指定的数据。我创建了一个新变量need,我相信这是你想要的结果。

transform(df, need = trunc(DT_LMT - DT_LMT[1]) + 1)

答案 1 :(得分:1)

我会将第一个值加1作为数据框的过滤器。

data<-data.frame(ID = 1:19, DT_LMT = c(41423.62517, 41423.79236, 
                                     41423.95868, 41424.12534, 41424.29203, 41424.45888, 41424.62535, 
                                     41424.79186, 41424.95852, 41425.12502, 41425.29185, 41425.75016, 
                                     41425.79201, 41425.83352, 41425.87534, 41425.91744, 41425.95868, 
                                     41426.00105, 41426.04257), NEED = c(1L, 1L, 1L, 1L, 1L, 1L, 2L, 
                                                                         2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L, 3L, 3L, 3L, 3L))

data[data$DT_LMT<=data$DT_LMT[1]+1,]

输出:

  ID   DT_LMT NEED
1  1 41423.63    1
2  2 41423.79    1
3  3 41423.96    1
4  4 41424.13    1
5  5 41424.29    1
6  6 41424.46    1

如果要在24小时内将数据拆分为列表。

split(data,unlist(lapply(data$DT_LMT,function(x){floor(x-data$DT_LMT[1])})))

输出:

$`0`
  ID   DT_LMT NEED
1  1 41423.63    1
2  2 41423.79    1
3  3 41423.96    1
4  4 41424.13    1
5  5 41424.29    1
6  6 41424.46    1

$`1`
   ID   DT_LMT NEED
7   7 41424.63    2
8   8 41424.79    2
9   9 41424.96    2
10 10 41425.13    2
11 11 41425.29    2

$`2`
   ID   DT_LMT NEED
12 12 41425.75    3
13 13 41425.79    3
14 14 41425.83    3
15 15 41425.88    3
16 16 41425.92    3
17 17 41425.96    3
18 18 41426.00    3
19 19 41426.04    3

添加当天的列。

data$day<-lapply(data$DT_LMT,function(x){floor(x-data$DT_LMT[1])+1})