r - Simultaneous order, row-filter and column-select with data.table -


i trying multiple steps in 1 line in r select value data.table (dt) multiple criteria.

for example:

set.seed(123) dt <- data.table(id = rep(letters[1:2],2),              time = rnorm(4),              value = rnorm(4)*100)  #    id        time      value # 1:  -0.56047565   12.92877 # 2:  b -0.23017749  171.50650 # 3:   1.55870831   46.09162 # 4:  b  0.07050839 -126.50612  # want select last (maximum time) value id == "a" # pseudo data.table code looks  dt[order(time) & id == "a" & .n, value] # [1] 12.92877 46.09162   

instead of getting 2 values want last value (which has higher time-value).

if step-by-step works:

dt <- dt[order(time) & id == "a"] dt[.n, value] # [1] 46.09162 

bonus:

how can order data.table without copying data.table: ie

dt <- dt[order(time)] 

without <-. similar :=-operator such in dt[, new_val := value*2] creates new variable without copying whole data.table.

thank you, idea appreciated!

for first question, try

dt[id == "a", value[which.max(time)]] ## [1] 46.09162 

for bonus question, try setorder function order data in place (you can order in descending order adding - in front of time)

setorder(dt, time) dt #    id        time      value # 1:  -0.56047565   12.92877 # 2:  b -0.23017749  171.50650 # 3:  b  0.07050839 -126.50612 # 4:   1.55870831   46.09162 

also, if ordering data time, both - order reference , select value condition- in single line

setorder(dt, time)[id == "a", value[.n]] 

Comments

Popular posts from this blog

python - TypeError: start must be a integer -

c# - DevExpress RepositoryItemComboBox BackColor property ignored -

django - Creating multiple model instances in DRF3 -