if statement - Conditional sum with output for all rows in r data.table -


i have coding issue think should easy. have created simplified dataset:

dt <- data.table(bank=rep(c("a","b","c"),4),                  type=rep(c("ass","liab"),6),                  amount=c(100,200,300,400,200,300,400,500,200,100,300,100)) # bank type amount sumliab # 1:     ass    100      na # 2:    b liab    200     700 # 3:    c  ass    300      na # 4:    liab    400     500 # 5:    b  ass    200      na # 6:    c liab    300     400 # 7:     ass    400      na # 8:    b liab    500     700 # 9:    c  ass    200      na # 10:    liab    100     500 # 11:    b  ass    300      na # 12:    c liab    100     400 

i want create variable sum of amount when type = "liab" per bank. no problem:

dt[type=='liab',sumliab:=sum(amount),by=bank] # bank type amount sumliab # 1:     ass    100      na # 2:    b liab    200     700 # 3:    c  ass    300      na # 4:    liab    400     500 # 5:    b  ass    200      na # 6:    c liab    300     400 # 7:     ass    400      na # 8:    b liab    500     700 # 9:    c  ass    200      na # 10:    liab    100     500 # 11:    b  ass    300      na # 12:    c liab    100     400 

but want value rows, when type =='ass'. understand na due dt[type=='liab',..] restriction. there clever way of coding value sumliab rows? (so row1 na sumliab gets value 500)

thanks! tim

when using type=='liab' in 'i', inserting values rows indexed 'i'. can subset 'amount' based on type=='liab' in 'j' , assign (:=) new variable.

 dt[, sumliab:= sum(amount[type=='liab']), =bank]  dt  #   bank type amount sumliab  #1:     ass    100     500  #2:    b liab    200     700  #3:    c  ass    300     400  #4:    liab    400     500  #5:    b  ass    200     700  #6:    c liab    300     400  #7:     ass    400     500  #8:    b liab    500     700  #9:    c  ass    200     400  #10:   liab    100     500  #11:   b  ass    300     700  #12:   c liab    100     400 

Comments