R 使用data.table进行顺序分组

R 使用data.table进行顺序分组,r,data.table,R,Data.table,我将以下数据集设置为data.table(dt): 我想要这个: wea start.point end.point 1: cloudy 1 8 2: sunny 9 12 3: rainy 13 16 4: sunny 17 18 5: cloudy 19 23 我试着运行以下程序,但没有成功 dt[, .(start.point =

我将以下数据集设置为data.table(dt):

我想要这个:

   wea start.point end.point
1:  cloudy           1      8
2:  sunny         9       12
3:  rainy         13       16
4:  sunny         17       18
5:  cloudy         19       23
我试着运行以下程序,但没有成功

 dt[, .(start.point = head(.I,1), end.point = tail(.I,1)) , by="wea"]

因为“by”将第二个“cloudy”块与第一个“cloudy”块组合在一起,但我想分离连续的块。

您可以使用
.I
创建索引,并在
by
语句中使用
rleid
来分离需要的部分。使用:

dt[, .(start.point = .I[1], end.point = .I[.N]), by = .(wea, rleid(wea))
   ][, rleid := NULL][]
给出:

      wea start.point end.point
1: cloudy           1         8
2:  sunny           9        12
3:  rainy          13        16
4:  sunny          17        18
5: cloudy          19        23

一般来说,最好用文字解释您想要什么,而不是仅仅显示所需的输出。我不知道函数
rleid
。它运行良好。谢谢
      wea start.point end.point
1: cloudy           1         8
2:  sunny           9        12
3:  rainy          13        16
4:  sunny          17        18
5: cloudy          19        23