Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/71.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-一组观测值的时间间隔自适应分割_R_Dataframe_Time Series - Fatal编程技术网

r-一组观测值的时间间隔自适应分割

r-一组观测值的时间间隔自适应分割,r,dataframe,time-series,R,Dataframe,Time Series,我有一个与时间相关的动物观察数据框,我需要将它们分配给不同的组,这取决于obs之间是否相隔10分钟。不过,使用固定的10分钟时间划分并不理想。 我的df看起来像这样: DateTime Total_Adults Site Species Group_equal_int Group_ideal 2016-05-28 18:29:14 1 1A wildebeest 1 1 2016

我有一个与时间相关的动物观察数据框,我需要将它们分配给不同的组,这取决于obs之间是否相隔10分钟。不过,使用固定的10分钟时间划分并不理想。 我的df看起来像这样:

             DateTime Total_Adults Site    Species  Group_equal_int Group_ideal
  2016-05-28 18:29:14            1   1A wildebeest                1           1
  2016-05-28 18:29:53            1   1A wildebeest                1           1
  2016-05-28 18:30:02            1   1A wildebeest                1           1
  2016-05-28 18:37:56            1   1A wildebeest                1           1
  2016-05-28 18:45:03            1   1A wildebeest                2           2
  2016-05-28 18:50:24            1   1A wildebeest                3           2
  2016-05-28 18:50:40            2   1A wildebeest                3           2
  2016-05-28 18:58:52            1   1A wildebeest                3           3
  2016-05-28 18:59:25            1   1A wildebeest                4           3
  2016-05-28 18:59:41            2   1A wildebeest                4           3
如果间隔10分钟,则认为观察是独立的,否则两个OB被视为同一只动物

一个简单的解决方案是从第一个obs开始,将时间序列划分为10分钟的括号

interval <- seq.POSIXt(from = min(df$DateTime), to = max(df$DateTime), by = 600)
df$Group_equal_int <- findInterval(df$DateTime, vec = interval)

interval这里有一个解决方案,有一个很好的for循环:

df$difftime <- c(0, diff(df$DateTime)/60)

df$group <- 1
time_in_group <- 0
for (i in seq.int(2, nrow(df))) {
    time_in_group <- time_in_group + df$difftime[i]
    if(time_in_group < 10)
        df$group[i] <- df$group[i-1]
    else {
        time_in_group <- 0
        df$group[i] <- 1 + df$group[i-1]
    }
}

df$difftime这里有一个解决方案,有一个很好的for循环:

df$difftime <- c(0, diff(df$DateTime)/60)

df$group <- 1
time_in_group <- 0
for (i in seq.int(2, nrow(df))) {
    time_in_group <- time_in_group + df$difftime[i]
    if(time_in_group < 10)
        df$group[i] <- df$group[i-1]
    else {
        time_in_group <- 0
        df$group[i] <- 1 + df$group[i-1]
    }
}

df$difftime假设数据帧是按时间排序的,为什么不计算连续观测之间的时间,并将其分配给同一组(如果时间小于10分钟)?如果从“开始”到“结束”之间的距离小于10分钟,则会将一长串OB分组到一个组中在这一系列超过10分钟的时间里(这将导致不止一个小组),在你的理想小组的例子中,第二组不应该也包括18:50:40的观察吗?但我同意Anamaria的建议。如果在18:00:30,即在您的示例中最后一次观察后不到一分钟,添加额外观察,则在使用您的定义时,它将被视为独立动物。因此,在这个例子中,10分钟的分组似乎有点随意…@Pierre这是真的,它本质上是随意的,有局限性。然而,它是在一篇同行评议论文中用同样的技术和巨大的数据集,在相同的环境下,对同一物种进行计算的,所以我认为这是你能得到的最好结果。假设数据框架是按时间排序的,为什么不计算连续观测之间的时间,如果少于10分钟,则将其分配给同一组?这将导致将一长系列OB分组到一个组中,因为它们彼此之间的距离小于10分钟,即使从序列的“开始”到“结束”经过的时间超过10分钟(这将导致多个组)在你的理想组的例子中,第2组不应该也包括18:50:40的观察吗?但我同意Anamaria的建议。如果在18:00:30增加额外的观察,在你的例子中最后一个观察后不到一分钟,在使用你的定义时,它将被视为一个独立的动物。因此,将10分钟分成一组ems在这个例子中有点武断…@Pierre这是真的,它本质上是武断的,有局限性。然而,它是在一篇同行评审的论文中用同样的技术和巨大的数据集在同一个物种的相同环境中计算出来的,所以我认为这是你能得到的最好结果。