2017-07-20 32 views
1

我有一個365天的數據集,分別包含一個溫度值。 我想分析包含正溫度和含有負溫度的時段的天數。所以我想計算一段時間的天數,直到溫度突破0爲止。我已經設置了一個跟蹤代數符號的列,但是現在我想添加另一列來跟蹤積極的日子和負數的日子,這樣我可以GROUP_BY各個時期和計算的消費,最小值,最大值等 平均我目前不知道如何得出的結果在一個情節,但也許你有一個想法..R計數正負數並按數據框中的時間段分組

  Time Consumption STABW_hour Min Max  mean DeltaDaymean Sign 
     <dttm>  <dbl>  <dbl> <dbl> <dbl> <dbl>  <dbl> <dbl> 
1 2014-01-01  1053.5 76.56046 964 1597.5 1159.804 -106.30411 -1 
2 2014-01-02  1197.5 76.56046 964 1597.5 1159.804  37.69589  1 
3 2014-01-03  1245.5 76.56046 964 1597.5 1159.804  85.69589  1 
4 2014-01-04  1147.5 76.56046 964 1597.5 1159.804 -12.30411 -1 
5 2014-01-05  1194.0 76.56046 964 1597.5 1159.804  34.19589  1 
6 2014-01-06  1171.5 76.56046 964 1597.5 1159.804  11.69589  1 
7 2014-01-07  1166.5 76.56046 964 1597.5 1159.804  6.69589  1 
8 2014-01-08  1135.0 76.56046 964 1597.5 1159.804 -24.80411 -1 
9 2014-01-09  1168.0 76.56046 964 1597.5 1159.804  8.19589  1 
10 2014-01-10  1181.5 76.56046 964 1597.5 1159.804  21.69589  1 

結果應該是這樣的,那麼我就可以通過新的列GROUP_BY數據..

  Time Consumption STABW_hour Min Max  mean DeltaDaymean Sign Period 
     <dttm>  <dbl>  <dbl> <dbl> <dbl> <dbl>  <dbl> <dbl> <dbl> 
1 2014-01-01  1053.5 76.56046 964 1597.5 1159.804 -106.30411 -1  1 
2 2014-01-02  1197.5 76.56046 964 1597.5 1159.804  37.69589  1  2 
3 2014-01-03  1245.5 76.56046 964 1597.5 1159.804  85.69589  1  2 
4 2014-01-04  1147.5 76.56046 964 1597.5 1159.804 -12.30411 -1  3 
5 2014-01-05  1194.0 76.56046 964 1597.5 1159.804  34.19589  1  4 
6 2014-01-06  1171.5 76.56046 964 1597.5 1159.804  11.69589  1  4 
7 2014-01-07  1166.5 76.56046 964 1597.5 1159.804  6.69589  1  4 
8 2014-01-08  1135.0 76.56046 964 1597.5 1159.804 -24.80411 -1  5 
9 2014-01-09  1168.0 76.56046 964 1597.5 1159.804  8.19589  1  6 
10 2014-01-10  1181.5 76.56046 964 1597.5 1159.804  21.69589  1  6 

謝謝非常!

+1

'cumsum(C(TRUE,DIFF(DF $標誌)!= 0))' – Cath

+0

謝謝。是的,它是一個重複的,但我不知道谷歌正確的熱,以找到正確的解決方案。 –

回答

0

使用dplyr,我們可以

library(dplyr) 
df1 %>% 
    mutate(Period = inverse.rle(within.list(rle(Sign), values <- seq_along(values)))) 

這樣做或者我們可以使用rleiddata.table

library(data.table) 
setDT(df1)[, Period := rleid(Sign)] 
+1

我使用了dplyr變體,它工作得很好。謝謝。 –