2015-01-22 3 views
3

У меня есть следующая таблицаПодсчет строк в data.table, которые удовлетворяют условию

DT = data.table(x=rep(c("a","b","c"),each=3), y=c(1,3,6), v=rep(4:6, 3)) 

Я хочу, чтобы подсчитать, сколько строк отвечают условию (y==3 & v==5).

Я могу получить строки, соответствующие условиям, поэтому я мог бы их сохранить, а затем сосчитать строки. Тем не менее, я знаю, что это можно сделать более эффективно с .N, я просто не знаю, как это сделать. Мой код:

require(data.table) 
keycols = c("y","v") 
setkeyv(DT,keycols) 

DT[J(3,5)] # This gets the subset I am interested in 

DT[ , `:=` (count = .N), by = J(3,5)] # This is one of the multiple unsuccessful ways I have been trying to count the rows. 

У любого есть идея, как сделать последнюю работу линии?

+2

Новый [Введение в data.table] (https://rawgit.com/wiki/Rdatatable/data.table/vignettes/datatable-intro-vignette.html) и [Ссылочная семантика] (https://rawgit.com/wiki/Rdatatable/data.table/vignettes/datatable-reference-semantics.html) у виньетров есть больше примеров. Проверьте обновления этой страницы (https://github.com/Rdatatable/data.table/issues/944). – Arun

ответ

6

Как насчет

DT[.(3,5), .N] 
# [1] 3 

## These are also equivalent 
## DT[J(3,5), .N] 
## DT[list(3,5), .N] 
Смежные вопросы