在R

2017-03-19 33 views
0

上升的條件計數(對會話Web流量)我期待會話一些網絡流量。我有我的數據幀列,總結的持續時間,直到秒的下一個請求,它可能是這樣的:在R

TimeToNext <- c(0,526,274,3000,1, 1900)

我想我可以寫一個時髦的小功能,保持的軌道內,然後會話數增加這將上浮了1(即...新的會話)如果TimeToNext超過我的閾值的數字會話值...類似:

session_length <- 1800

我試着寫(注意,我想在會話中加入,所以我可以選擇在如果需要更高的數字開始的,這是start_session):

sessionise <- function(TimeToNext, start_session = 1) { 
    session = start_session 
    if(TimeToNext >= session_length) { 
    session = session + 1 
    session 
    } else { 
    session 
    } 
} 

但是這讓我以下警告:

Warning message: 
In if (TimeToNext >= session_length) { : the 
condition has length > 1 and only the first element will be used 

我不明白它...我可以做的:

TimeToNext[1:6] > 1800 
[1] FALSE FALSE FALSE TRUE FALSE TRUE 

我想我一定是缺少一些關於設置變量的範圍樂從有條件的循環中......

只要是明確的,在上面的例子中我會尋找會是這樣的:

sessionise(TimeToNext) 
[1] 1 1 1 2 2 3 

我失去了一些有關範圍是什麼?或者我錯誤地處理了一個數據幀......?

+1

不應該說,它是'1,1,1,2,2,2'?即'cumsum(TimeToNext> 1800)+ 1' – Sotos

+0

很正確,這是一個錯字,已經將頂部修改爲'TimeToNext < - c(0,526,274,3000,1,1900)'。謝謝! – Huw

+0

'cusum'看起來就像我之後的事!把它放在答案中,我會標記它是正確的。非常感謝! – Huw

回答

1

您可以使用cumsum創建功能,即

f1 <- function(TimeToNext, session_length, Startsession = 1){ 
    cumsum(TimeToNext > session_length) + Startsession 
} 

f1(TimeToNext = TimeToNext, session_length = 1800) 
#[1] 1 1 1 2 2 3