2016-05-11 9 views
1

次の表があります。同じ訪問者(ブラウザ)に30分以上の差がある2つの固有のタイムスタンプがある場合、これらは次のように仮定して固有セッションの数を計算します。 2つのユニークセッションとみなされます。訪問者1人あたりのユニークセッション数を計算する

ブラウザが独自に各ユーザーを識別している タイムスタンプは、時間 ページで日付であるので、論理与えられ、上記ダミーテーブルに基づいて、私は3つのユニークなセッションを取得する必要がありますURLページ

Browsers timestamp    Page 
    x  2014-01-01 14:15:33  1 
    x  2014-01-01 14:16:33  2 
    x  2014-01-01 14:17:33  3 
    x  2014-01-01 16:15:33  1 
    y  2014-01-01 16:20:33  5 
    y  2014-01-01 16:25:33  2 

です。ブラウザxの場合は2、ブラウザの場合は1 y

私はかなり新しいRですので、始める方法もわかりません。関連する何かを読むための助言や提案は非常に感謝しています。

data.tableを使用して
+0

では?たとえば、ブラウザ「z」にタイムスタンプが8:00、8:20、および8:40の場合、この1セッションですか? – Gregor

+0

まさに!私のデータセット。私のデータセットの各行は、自分のサイトの1ページへの訪問を表します。列ブラウザはユーザーのIDを表します。各ユーザーは1ページを訪問したり、別のページに移動したりクリックしたりできます。同じ訪問者の場合、順次タイムスタンプが30分を超える場合、その2つは2回の異なる訪問として識別されるべきです – kostas

+0

タイムスタンプ列はすでに有効なPOSIXクラスですか、それとも文字か要素ですか? – Gregor

答えて

4

ソリューション:

setDT(df)[order(timestamp), .(uniSession = sum(diff(timestamp) > 30) + 1), .(Browsers)] 
    Browsers uniSession 
1:  x   2 
2:  y   1 
+0

それは動作しますが、私は何千ものものを持っていて有用ではないので、ブラウザごとの合計は必要ありません(論理が理解されていることを誤解していたらごめんなさい)。代わりに、より集計された値を合計するか、理想的には別の列でグループ化して、議論のために言うことができます。 – kostas

+0

ロジックを保持しているデータセット全体の合計を取得することはできますか(実質的にはスクリプトの結果の合計) – kostas

+0

後に別のサマリーセッションを追加できます。つまり、「setDT(df)[order(timestamp)、(uniSession = sum(diff(timestamp)> 30)+1」、(ブラウザ)]、[(sumUniSessions = sum(uniSession))] 'となります。 'sumUniSessions'に3をつけてください。 – Psidom

0

あなたが実行してやりたいん何dplyr

library(dplyr) 
df %>% 
    group_by(Browsers) %>% 
    arrange(timestamp) %>% 
    summarise(uniSession = sum(diff(timestamp) > 30) + 1) 
関連する問題