2016-06-21 49 views
4

,我有以下數據集作爲data.table(DT):順序集團通過使用data.table

    time wea 
1 2016-06-16 00:04:50 cloudy 
2 2016-06-16 02:14:55 cloudy 
3 2016-06-16 03:19:04 cloudy 
4 2016-06-16 04:19:24 cloudy 
5 2016-06-16 05:23:45 cloudy 
6 2016-06-16 06:25:05 cloudy 
7 2016-06-16 07:26:46 cloudy 
8 2016-06-16 08:27:06 cloudy 
9 2016-06-16 09:34:09 sunny 
10 2016-06-16 10:36:29 sunny 
11 2016-06-16 11:39:09 sunny 
12 2016-06-16 12:39:29 sunny 
13 2016-06-16 13:44:50 rainy 
14 2016-06-16 14:46:31 rainy 
15 2016-06-16 15:47:12 rainy 
16 2016-06-16 16:48:12 rainy 
17 2016-06-16 17:49:54 sunny 
18 2016-06-16 18:50:34 sunny 
19 2016-06-16 19:51:34 cloudy 
20 2016-06-16 20:53:55 cloudy 
21 2016-06-16 21:56:51 cloudy 
22 2016-06-16 22:30:42 cloudy 
23 2016-06-16 23:26:14 cloudy 

而且我想這一點:

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」將第二個「陰天」塊與第一個「陰天」塊一起分組,但我想分開連續的塊。

+3

一般最好在你想和什麼樣的語言來解釋,而不是僅僅顯示所需的輸出。 – Frank

回答

5

您可以使用.Iby語句中創建索引並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 
+0

我不知道函數'rleid'。它運作良好。謝謝!! –