2016-03-26 15 views
5

によってIはRカウント数は、グループ

col1 col2 col3 col4 
1: 5.1 3.5 1.4 setosa 
2: 5.1 3.5 1.4 setosa 
3: 4.7 3.2 1.3 setosa 
4: 4.6 3.1 1.5 setosa 
5: 5.0 3.6 1.4 setosa 
6: 5.1 3.5 3.4 eer 
7: 5.1 3.5 3.4 eer 
8: 5.1 3.2 1.3 eer 
9: 5.1 3.5 1.5 eer 
10: 5.1 3.5 1.4 eer 


DT <- structure(list(col1 = c(5.1, 5.1, 4.7, 4.6, 5, 5.1, 5.1, 5.1, 
5.1, 5.1), col2 = c(3.5, 3.5, 3.2, 3.1, 3.6, 3.5, 3.5, 3.2, 3.5, 
3.5), col3 = c(1.4, 1.4, 1.3, 1.5, 1.4, 3.4, 3.4, 1.3, 1.5, 1.4 
), col4 = structure(c(1L, 1L, 1L, 1L, 1L, 4L, 4L, 4L, 4L, 4L), .Label = c("setosa", 
"versicolor", "virginica", "eer"), class = "factor")), .Names = c("col1", 
"col2", "col3", "col4"), row.names = c(NA, -10L), class = c("data.table", 
"data.frame")) 

でdata.tableを有するIは、col4の各値に対してcol1col2のユニークな(異なる)の組み合わせをカウントします。

の予想される出力は、私が唯一の1つのdata.table構文でこれを行うことができますどのように

col1 col2 col3 col4 count 
1: 5.1 3.5 1.4 setosa  4 
2: 5.1 3.5 1.4 setosa  4 
3: 4.7 3.2 1.3 setosa  4 
4: 4.6 3.1 1.5 setosa  4 
5: 5.0 3.6 1.4 setosa  4 
6: 5.1 3.5 3.4 eer  2 
7: 5.1 3.5 3.4 eer  2 
8: 5.1 3.2 1.3 eer  2 
9: 5.1 3.5 1.5 eer  2 
10: 5.1 3.5 1.4 eer  2 

のですか?

+0

ここではいくつかの他の非data.table方法があります。http://stackoverflow.com/questions/17421776/how- group-to-r-dataフレームによるユニークな値のカウントの追加 – Frank

答えて

13

私は最初にいくつかの試みを経なければならず、これで終わりました。良い?

DT[, count:=nrow(unique(.SD)), by=col4, .SDcols=c("col1","col2")] 
DT 
    col1 col2 col3 col4 count 
1: 5.1 3.5 1.4 setosa  4 
2: 5.1 3.5 1.4 setosa  4 
3: 4.7 3.2 1.3 setosa  4 
4: 4.6 3.1 1.5 setosa  4 
5: 5.0 3.6 1.4 setosa  4 
6: 5.1 3.5 3.4 eer  2 
7: 5.1 3.5 3.4 eer  2 
8: 5.1 3.2 1.3 eer  2 
9: 5.1 3.5 1.5 eer  2 
10: 5.1 3.5 1.4 eer  2 
> 

と同じですが、より速く以下Procrastinatusコメントのおかげで:

DT[, count:=uniqueN(.SD), by=col4, .SDcols=c("col1","col2")] 
+1

私はあなたが 'uniqueN'を使用していないことに非常に驚いています。それに対する具体的な理由は何ですか? – Jaap

+0

はい...アルンは先を鍛えていて、私はユニークなことを忘れてしまった!ニース。それを見ると、 'DT'が' col1'によってキーインされている場合に、 'by = NULL'を設定するべきですか? –

+0

これは、私が試してみると 'col1'の中で一意の値を与えるだけです(これはOPが望むものではありません)。 Btw:速度に関しては、 'length(unique()) 'を使うことは[uniqueN'よりも速い]と思われます(http://stackoverflow.com/questions/34007199/frequency-ofrows-by-id大規模なデータセットについて。 – Jaap

関連する問題