Aggregating data with 2 columns in data.table (r language) -
i have table(input):
date directorname companyname rank 2015-08-01 sergey vino 29 2015-08-02 sergey vino 42 2015-08-09 sergey vino 25 2015-08-04 sergey vino 27 2015-08-05 mike bolder 29 2015-08-01 mike bolder 27 2015-08-11 mike bolder 23 2015-08-09 mike bolder 30 2015-08-09 jay bolder 2 2015-08-10 jay bolder 10 2015-08-11 jay bolder 31 i want know directorname reached top 30 in rank companyname never reached top 10. output:
date directorname companyname rank 2015-08-01 sergey vino 29 2015-08-02 sergey vino 42 2015-08-09 sergey vino 25 2015-08-04 sergey vino 27 thanks help!
we can try in two-step process using data.table. convert 'data.frame' 'data.table' (setdt(df1)), grouped 'companyname' if all 'rank' greater 10 subset data.table (.sd) (in current example gives expected output). in second step, group 'directorname', check if any elements of 'rank' greater 30, subset again.
library(data.table) setdt(df1)[, if(all(rank > 10)) .sd, companyname][, if(any(rank >30)) .sd , directorname] # companyname date directorname rank #1: vino 2015-08-01 sergey 29 #2: vino 2015-08-02 sergey 42 #3: vino 2015-08-09 sergey 25 #4: vino 2015-08-04 sergey 27
Comments
Post a Comment