R根据两个连续点之间的差异切割时间序列

时间:2018-02-08 17:46:07

标签: r dplyr

所以我随着时间的推移测量了x和y的位置。测量有时会有间隙(没有测量)。 现在我想只在连续的增量不大于30秒时绘制线段。

我怎样才能在R?

中这样做

数据:

# A tibble: 21 x 5
           x          y           timestamp delta   cut
       <dbl>      <dbl>              <dttm> <dbl> <lgl>
 1 203.09395 348.038092 2018-01-08 17:01:41    13 FALSE
 2 180.01089 278.710786 2018-01-08 17:02:05    24 FALSE
 3 164.64089 186.764107 2018-01-08 17:02:29    24 FALSE
 4 113.96565  70.088552 2018-01-08 17:02:41    12 FALSE
 5  59.46439 103.576389 2018-01-08 17:02:53    12 FALSE
 6 354.88161   5.951221 2018-01-08 17:05:07   134  TRUE
 7 446.18112 169.600388 2018-01-08 17:05:19    12 FALSE
 8 480.14825 223.918125 2018-01-08 17:05:31    12 FALSE
 9 512.22982 222.538262 2018-01-08 17:05:43    12 FALSE
10 534.70655 234.280080 2018-01-08 17:05:55    12 FALSE

我想要的结果是,一旦delta超过theshold值,就会创建一个具有新级别的额外因子,因此我可以将这些段视为不同。

# A tibble: 21 x 5
           x          y           timestamp delta   cut
       <dbl>      <dbl>              <dttm> <dbl> <lgl>
 1 203.09395 348.038092 2018-01-08 17:01:41    13 FALSE
 2 180.01089 278.710786 2018-01-08 17:02:05    24 FALSE
 3 164.64089 186.764107 2018-01-08 17:02:29    24 FALSE
 4 113.96565  70.088552 2018-01-08 17:02:41    12 FALSE
 5  59.46439 103.576389 2018-01-08 17:02:53    12 FALSE
 6 354.88161   5.951221 2018-01-08 17:05:07   134  TRUE

在这里分裂......

 7 446.18112 169.600388 2018-01-08 17:05:19    12 FALSE
 8 480.14825 223.918125 2018-01-08 17:05:31    12 FALSE
 9 512.22982 222.538262 2018-01-08 17:05:43    12 FALSE
10 534.70655 234.280080 2018-01-08 17:05:55    12 FALSE

我调查了cutdplyr,但在R中看不到明显的解决方案?

2 个答案:

答案 0 :(得分:0)

鉴于您已经有一个变量cut(如输出中所示),如果您想要一个为每个剪辑提供新级别的变量,您只需添加:

new_var <- as.factor(cumsum(cut))

作为数据集的新变量

答案 1 :(得分:0)

这取决于您想要的输出,但您可以使用splitcut

split(data, cut(df$timestamp, seq(min(df$timestamp), max(df$timestamp) + 31, by = 30)))

您可以修改cut选项include.lowest&amp; right根据需要定义间隔