我有一些关于IT技术的数据,我想从中识别出模式。然而每个表格中的数据都不完整(存在缺失行)。我想将表格分成完整数据的块,然后从每个块中识别出模式。我有一列可以用来确定数据是否完整,它叫做sequence
。
数据看起来像:
Sequence Position
1 open
2 closed
3 open
4 open
5 closed
8 closed
9 open
11 open
13 closed
14 open
15 open
18 closed
19 open
20 closed
首先,我想将数据拆分为完整的部分:
Sequence Position
1 open
2 closed
3 open
4 open
5 closed
---------------------------
8 closed
9 open
---------------------------
11 open
---------------------------
13 closed
14 open
15 open
---------------------------
18 closed
19 open
20 closed
接下来我想要确定模式closed open, ..., open, closed
,这种模式是指我们需要在 n 行中(n 至少为 1)从关闭状态切换到开启状态,然后再切换回关闭状态。
根据样本数据,这将会得到:
Sequence Position
2 closed
3 open
4 open
5 closed
---------------------------
18 closed
19 open
20 closed
这留下了我的最终表格,可以在上面进行分析,因为我知道没有损坏的序列。我还有另一列,其中
position
是二进制的,如果使用这种方法更容易处理,则可以使用它。由于表格很大,所以尽管我认为我可以编写循环来找出结果,但我认为那种方法不够高效。或者,我打算将整个表格拉入
R
,然后找到结果表格,但这需要首先将所有内容都拉入R
,因此我想知道是否可以在SQL
中实现。编辑:更具代表性的不同样本数据:
Sequence Position
1 open
2 closed
3 open
4 open
5 closed
8 closed
9 open
11 open
13 closed
14 open
15 open
18 closed
19 open
20 closed
21 closed
22 closed
23 closed
24 open
25 open
26 closed
27 open
请注意,这应该具有相同的结果,但也需要使用相同的HTML标签。
23 closed
24 open
25 open
26 closed
21
、22
和27
不符合closed
、open
、open
、closed
的模式,因此它们不需要被包括在内。但是,如果我们有一个
28 closed
,那么我们希望27
和28
被包括在内,因为没有时间间隔并且模式匹配。如果28
被替换为29 closed
,我们将不需要27
或29
(因为尽管模式正确但序列中断)。为了增加一些背景信息,想象一台从停止到运行再到停止的机器。我们记录数据,但记录中存在断点,这里用序列中断来表示。除了停止运行停止周期中的缺失数据外,数据有时也会在机器已经运行时开始记录或在机器停止之前停止记录。我们不需要这些数据,因为它们不是完整的停止、运行、停止周期。我们只需要那些完整周期,并且序列连续的周期。这意味着我可以将原始数据集转换为只有一个接一个的完整周期。
select
,它还过滤了数据。 - Olivia