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
Post a Comment