2017-03-19 10 views
0

解決するには次の問題があります。私はGoogleアナリティクスから、列A、因子変数(ユーザーID)、列B、セッションの日付、列Cのセッション数または他のメトリックRは毎週の使用量にデータを再計算します

テーブルを作成したいのですが、最初の列には係数があり、その後の列には1〜8週目が表示されます。 Rは、異なるユーザが異なる日付でウェブページを使用し始めたので、各週の最初のセッション日付に応じて各要素(因子)のセッション数を計算することである。これは、約8週間のプロジェクト中にユーザーがどのように関わったかを示すはずです。ここで

は一例です:任意のRパッケージを使用するCAが、私は希望

end result

例:

df <- data.frame(
 
     fac=c("a","a","a","a","a","b","b","b","b","b","c","c","c","c","c","d","d","d","d","d","d"), 
 
     date=c("2017-01-01","2017-01-05","2017-01-13","2017-01-25","2017-02-10","2017-01-06","2017-01-16","2017-01-28","2017-02-02","2017-02-07","2017-01-11","2017-01-19","2017-01-24","2017-01-31","2017-02-09","2017-01-12","2017-01-24","2017-01-29","2017-02-04","2017-02-19","2017-03-08"), 
 
     sessions=c(1,2,3,6,5,1,3,2,3,3,1,5,3,2,4,1,3,5,2,6,6) 
 
     )

は次のようになります。可能であれば、ループを回避するのが好きです。

+0

同様の方法論を使用することができます:週カレンダー週を表すものではありませんが、むしろ、最初のイベントの日付は、最初に決定します8週間の実験の最初の週の日、開始日が何であっても。したがって、データフレームは8週間の要素で構成されます。 –

答えて

0

dcastでこれを実行して、「ロング」フォーマットから「ワイド」フォーマットに変換することができます。 'data.table'(setDT(df))を 'fac'と 'date'でグループ化してweekに変換し、data.table(.SD[1L])のサブセットの最初の行を取得し、次に 'long'のdcastを取得します。

library(data.table) 
dcast(setDT(df)[, .SD[1L], .(fac, Week = factor(paste0("Week", week(as.Date(date))), 
       levels = paste0("Week", 1:10)))], fac ~ Week, drop = FALSE) 

それともtidyverseと「ワイド」に、我々は注意することが重要

library(dplyr) 
library(tidyr) 
df %>% 
     group_by(fac, Week = factor(paste0("Week", 
       week(as.Date(date))), levels = paste0("Week", 1:10))) %>% 
     slice(1) %>% 
     select(-date) %>% 
     spread(Week, sessions) 
+0

あなたの提案したソリューションをお寄せいただきありがとうございます。私は自分自身を非常に明確に表明していないと思います。週は実際のカレンダーの週を反映するものではなく、ウェブサイトが使用された実験に数週間参加したものです。したがって、どの人(因子)が最初にウェブサイトを使用するか(因子の最初の入力)の日付は、その最初の週の最初の日である必要があります。したがって、データフレーム全体は8週間の要因になるはずです。これを達成するために以前のソリューションをどのように変えるかをヒントとして教えてください。どうもありがとう! –

関連する問題