2016-04-08 8 views
-2

私は日のデータを持つデータセット(1行は1行)を扱っています - 製品の(それが宣伝されている)それはユーザによって見られているか、またはアクションがとられているかどうかです。代替方法でRのSqldf演算子の効率を上げよう

このデータセットで分析を実行する前に、Rのデータセットを分析する前に、製品の数とアクションの回数の差があるすべての日を除外する方法でデータをフィルタリングする必要があります取られて2で、ビューは3 ある私はR内のSQL文によってこれを行うことができました - まず、私は次のようsqldfパッケージを使用して、必要な日数フィルタリング:

filterd_days = sqldf(select day, count(views) as seen, count(action) 
as actions from subset_data group by day 
having (count(views) - count(action) = 2) and count(views) = 3) 

私は、このデータセットに参加(O/pのSQL)を元のデータセットにフィルタリングして、必要な日付をフィルタリングします。

data_new = data[data$day %in% filter_days$day,] 

しかし、これは実行する各データセットの5分の近くを取っているし、これは、この操作を実行し、同じO/Pを取得するためのより高速な方法があるかどう思って毎日実行する必要があるとして。

+1

サンプル入力データと予想される出力データを提供することは、実際の回答を得るのに最も役立ちます。 – Gopala

+0

インデックスを追加してみてください。例については、sqldf githubページを参照してください。 –

答えて

0

代わりdata.frame

昇天のdata.table使用してみてください:

私はデータセットを想定していますが、次のように表示されます

>t 
      day views action 
1: 01/01/2010  1  1 
2: 01/01/2010  1  0 
3: 01/01/2010  1  0 
4: 02/01/2010  1  1 
5: 02/01/2010  1  1 

あなたがこれを実行する場合は、必要なサブセットを取得しますコマンド:

t[,if (sum(views) - sum(action) == 2 & sum(views) == 3) .SD,by=day] 

出力は

  day views action 
1: 01/01/2010  1  1 
2: 01/01/2010  1  0 
3: 01/01/2010  1  0 
+0

@PratyushTallapragada "data.table"パッケージをインストールしましたか? "data.table"について気づかない場合は、まず "data.table"のチュートリアルを参照してください。これはdata.frameとは多少異なります。 –

+1

以前は使用していませんでした。基本的な構文を踏んで、今、私のファイルでそれを試してみましたが、それは私に0行を与えました。 .SDを含めるようにソリューションを編集したことがわかります - データテーブルに使用されているデータフレーム関連のパラメータがわかります - その使用法は何ですか、この場合はなぜ使用する必要がありますか?お手伝いありがとう! –

+0

また、o/pが0になる前の警告は: "if((count(views) - count(action))== ...): 条件の長さが1より大きく、最初の要素が使用されます " これは何を意味するのかよく分かりませんどんな考えですか? –

関連する問題