2016-11-29 5 views
0

私はRに変換しようとしているSQLクエリを持っている:Rのデータフレームは、このようなものに見えるところRの特定の列で値をグループ化して別々にカウントする方法はありますか。

SELECT t."col1", t."col2", count(DISTINCT t."date") 
FROM t 
GROUP BY t."col1", t."col2" 

col1 col2 date 
a 1 2016-01-09 
a 1 2016-01-02 
a 1 2016-01-02 
b 1 2016-01-07 
b 1 2016-01-03 
b 1 2016-01-02 
b 1 2016-01-07 
b 2 2016-01-11 

を実際の出力は次のようなものでなければなりません

col1 col2 count 
a 1 2 
b 1 3 
b 2 1 

私はplyrパッケージのcountメソッドを見てきましたが、別個の日付の数は考慮していません。

Runinngこの

count(t, c("col1", "col2")) 

はこれを生成します。

col1 col2 count 
a 1 3 
b 1 4 
b 2 1 

はどうすればRでのSQLクエリの動作を複製することができますか?あなたはDFと呼ばれるデータフレームに原子レベルのデータを持っていると仮定すると

+2

を使用してオプションです。一意(df)、長さ) 'を指定します。しかし、他にも多くの方法があります。 plyrが必要な場合は、おそらく 'count(unique(df)、c(" col1 "、" col2 "))'を実行することができます。コード内のどこにでも一意のエントリが必要な指定をしていないと、あなたのソリューションがうまくいくとは思えませんでした。 –

+1

'sqldf'パッケージを見てください。 – Prradep

答えて

3

:ここ

library(dplyr) 
df %>% 
    group_by(col_1, col_2) %>% 
    summarise(distinct_ct = n_distinct(date)) 
+0

良い点。一定! – Jacob

2

は、ベースRIを使用すると、 `集計(日付〜となるだろうdata.table

library(data.table) 
setDT(df)[, .(distinct_ct = uniqueN(date)), by = .(col_1, col_2)] 
関連する問題