简体   繁体   中英

Counting rows in data.table that meet a condition

I have the following table

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

I want to count how many rows meet the condition ( y==3 & v==5 ).

I can get the rows that meet the condition, so I could save them and then count the rows. However, I know it can be done more efficiently with .N , I just don't know how. My code:

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. 

Anyone has any idea on how to make the last line work?

How about just

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

## These are also equivalent
## DT[J(3,5), .N]
## DT[list(3,5), .N]

This should work

DT[ y == 3 & v == 5, count := .N]

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM