У меня проблема с кодированием, что, по моему мнению, должно быть очень простым. Я создал упрощенный набор данных:Условная сумма с выходом для всех строк в r data.table
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: a Ass 100 NA
# 2: b Liab 200 700
# 3: c Ass 300 NA
# 4: a Liab 400 500
# 5: b Ass 200 NA
# 6: c Liab 300 400
# 7: a Ass 400 NA
# 8: b Liab 500 700
# 9: c Ass 200 NA
# 10: a Liab 100 500
# 11: b Ass 300 NA
# 12: c Liab 100 400
Я хочу, чтобы создать переменную, которая является суммой количества, когда Type = «Liab» в банке. Так что это не проблема:
DT[Type=='Liab',SumLiab:=sum(Amount),by=Bank]
# Bank Type Amount SumLiab
# 1: a Ass 100 NA
# 2: b Liab 200 700
# 3: c Ass 300 NA
# 4: a Liab 400 500
# 5: b Ass 200 NA
# 6: c Liab 300 400
# 7: a Ass 400 NA
# 8: b Liab 500 700
# 9: c Ass 200 NA
# 10: a Liab 100 500
# 11: b Ass 300 NA
# 12: c Liab 100 400
Но я хочу это значение для всех строк, даже если тип == «Ass». Я понимаю, что теперь я получаю NA из-за ограничения DT[Type=='Liab',..]
. Есть ли умный способ кодирования для получения значения SumLiab для всех строк? (Итак, строка1, которая в настоящее время является NA для SumLiab, получает значение 500)
Спасибо! Tim
Точно, что я искал, спасибо! По-видимому, он примет это как ответ, когда возникнет ограничение времени. –