2016-03-16 65 views
2

我的數據有一個理想的範圍,但進入過高或過低的區域。我希望能夠將點數過高或過低的實例組合爲單獨的實例。 我做了一些假的數據在這裏:按閾值對時間系列數據進行分組

library(dplyr) 
library(ggplot2) 

set.seed(123432) 
dat <- data.frame(value = sample(20:600, 20, replace=F))%>% 
     mutate(ord = row_number(), 
       cat = ifelse(value > 350, "high", 
        ifelse(value < 90, "low", "good")), 
       extreme = ifelse(cat=="high" & value > lag(value) & value > lead(value), "Peak", 
         ifelse(cat=="low" & value < lag(value) & value < lead(value), "Trough", ""))) 

和在這裏的圖表:

ggplot(dat, aes(x = ord, y = value))+ 
    geom_point()+ 
    geom_line()+ 
    geom_hline(yintercept = 300, color="blue")+ 
    geom_hline(yintercept = 120, color="blue")+ 
    coord_fixed(.025) 

enter image description here

我知道如何組在Excel這些高&低的地區,但可以」 t似乎複製它在R我想產生這樣的東西(雖然E1將是「系列」):

enter image description here

通知列E基於列C &每個系列可能有多個峯值/谷值。

我希望這是明確的,你們鄉親們可以提供幫助。如果可能的話,我想堅持dplyr。

謝謝。

+1

這是我不太清楚你真正想要的東西。劇情?一個單獨的數據框?單獨的數據框列?爲我們定義「獨立實例」。 –

+0

我想要一個列添加到我的數據框,看起來像excel示例中的E列。每當「貓」變量發生變化時,它應該增加值。 – yake84

回答

2

從你在評論中的描述我認爲這是你在找什麼。需要注意的是我的參數長度可變n

library(dplyr) 
library(ggplot2) 

set.seed(123432) 
n <- 20 
dat <- data.frame(value = sample(20:600, n, replace=F))%>% 
    mutate(ord = row_number(), 
     cat = ifelse(value > 350, "high", 
         ifelse(value < 90, "low", "good")), 
     extreme = ifelse(cat=="high" & value > lag(value) & 
               value > lead(value), "Peak", 
          ifelse(cat=="low" & value < lag(value) & 
               value < lead(value), "Trough", "")), 
     c1 = cat, 
     c2 = c(cat[1],cat[1:(n-1)]), 
     chg = cumsum(c2!=c1)+1  ) 

產生:

value ord cat extreme c1 c2 chg 
1  96 1 good   good good 1 
2 254 2 good   good good 1 
3 458 3 high Peak high good 2 
4 453 4 high   high high 2 
5 567 5 high Peak high high 2 
6 313 6 good   good high 3 
7 353 7 high Peak high good 4 
8  20 8 low Trough low high 5 
9 487 9 high Peak high low 6 
10 48 10 low Trough low high 7 
11 288 11 good   good low 8 
12 171 12 good   good good 8 
13 175 13 good   good good 8 
14 462 14 high Peak high good 9 
15 95 15 good   good high 10 
16 360 16 high   high good 11 
17 407 17 high   high high 11 
18 484 18 high Peak high high 11 
19 159 19 good   good high 12 
20 36 20 low <NA> low good 13 
+0

就是這樣!我將不得不進一步探討cumsum(...)的工作原理。這一步可以用於dplyr語句嗎? – yake84

+0

是的,我認爲是。會做了點:) –

+1

'發生變異(DAT,CHG = cumsum(貓!=滯後(as.character(貓),默認值=貓[1]))' 感謝您的幫助,你的代碼讓我上面一行。因爲第一滯後值是'NA',我用的是'default'參數填寫與'$逸cat' – yake84

相關問題