0

日付 X に IP アドレスが 50 回以上存在した場合に値 1 を取るインジケーター変数を定義できる dplyr の簡単で効率的な方法を誰かが知っていることを期待していました。データは 2 つの列で、1 つは IP アドレスで、もう 1 つは関連付けられたアクセス日付です。

例として、Robot 列に次の出力を表示したいと思います (日付と IP の組み合わせが >=3 であると仮定します)。

IP Date Robot
1   A   1
1   A   1
1   A   1
1   B   0
2   B   0
2   C   1
2   C   1
2   C   1
3   C   0
3   D   0
4   A   0

ありがとう!

4

3 に答える 3

4

group_by2 つの変数を使用n()して、その日に存在する住所の数をテストできます。

group_by(df,date,ip) %>% 
  mutate(keep=as.numeric(n() > 50))
于 2016-01-18T07:54:26.707 に答える
0

を使用できますdata.table。「data.frame」を「data.table」( setDT(df1)) に変換し、「IP」と「日付」でグループ化します。論理 ( .N>=3) をバイナリ表現に変換して「ロボット」を作成します。+これは、論理ベクトルを使用するか、関数を使用するだけで実行できますas.integer

library(data.table)
setDT(df1)[, Robot:= +(.N>=3), .(IP, Date)]

+置き換えることができますas.integer


または でbase R、使用できますave

transform(df1, Robot=as.integer(ave(IP, IP, Date, FUN=length)>=3))
于 2016-01-19T03:04:54.627 に答える