r - r data.table 中所有行的条件总和输出

标签 r if-statement data.table subset

我有一个编码问题,我认为应该很简单。我创建了一个简化的数据集:

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

但我希望所有行都有这个值,即使 Type =='Ass' 时也是如此。据我了解,由于 DT[Type=='Liab',..] 限制,我现在得到 NA。是否有一种巧妙的编码方法来获取所有行的 SumLiab 值? (因此当前 SumLiab 的 NA 的 row1 的值为 500)

谢谢! 蒂姆

最佳答案

当我们在“i”中使用Type=='Liab'时,它只会将值插入到由“i”索引的行中。我们可以根据“j”中的 Type=='Liab' 对“Amount”进行子集化,并将其分配 (:=) 为新变量。

 DT[, SumLiab:= sum(Amount[Type=='Liab']), by =Bank]
 DT
 #   Bank Type Amount SumLiab
 #1:    a  Ass    100     500
 #2:    b Liab    200     700
 #3:    c  Ass    300     400
 #4:    a Liab    400     500
 #5:    b  Ass    200     700
 #6:    c Liab    300     400
 #7:    a  Ass    400     500
 #8:    b Liab    500     700
 #9:    c  Ass    200     400
 #10:   a Liab    100     500
 #11:   b  Ass    300     700
 #12:   c Liab    100     400

关于r - r data.table 中所有行的条件总和输出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31471432/

相关文章:

r - 使用位置和名称的数据表子集

从单个文本文件读取多个表?

r - 如何从向量中删除某些项目?

c - 检测 scanf 读取的值的变化

c - 输入比较不正常,总是去失败的情况下,为什么?

包含数千列的 R fread 文件,在前 10 列之后连接

r - 在 R 中优化复杂的 data.table 聚合

R:动态创建变量名

Excel - 识别一张工作表中的值与另一张工作表中具有不同范围的值

r - data.table 中的变量用法