R ddply 仅汇总选定/特定/逻辑行的总和

标签 r dataframe plyr

我有一个客户贷款数据库,我想对每个 LoanRefID 做一个 ddply 总结:

    LoanRefId               Tran_Type TransactionAmount
103        11               LoanIssue         1000.0000
104        11           InitiationFee          171.0000
105        11                Interest           59.6729
106        11       AdministrationFee           64.9332
107        11 RaisedClientInstallment         1295.5757
108        11       ClientInstallment         1295.4700
109        11                  PaidUp            0.0000
110        11              Adjustment            0.1361
111        11                  PaidUp            0.0000
112        12               LoanIssue         3000.0000
113        12           InitiationFee          399.0000
114        12                Interest           94.9858
115        12       AdministrationFee           38.6975
116        12 RaisedClientInstallment         3532.6350
117        12       ClientInstallment         3532.6100
118        12                  PaidUp            0.0000
119        12              Adjustment            0.0733
120        12                  PaidUp            0.0000

但是,我只想对每个 loanID 的某些行求和。具体来说,我只想在 Tran_Type == "ClientInstallment"的位置求和。

我能想到的唯一方法(似乎不起作用)是:

> ddply(test, c("LoanRefId"), summarise, cash_in = sum(test[test$Tran_Type == "ClientInstallment","TransactionAmount"]))

  LoanRefId cash_in
1        11 4828.08
2        12 4828.08

这不是对每个 LoanRefId 求和,它只是对所有金额求和,其中 Tran_Type == "CLientInstallment"是错误的。

有没有更好的方法来做这个逻辑和?

最佳答案

有人可能会添加一个 plyr 答案,但如今 base Rdplyrdata.table 更多被广泛使用的。 plyr 已更新和升级。花时间学习更新的实现是值得的,因为它们更高效并且包含更多功能。

基础 R

aggregate(TransactionAmount ~ LoanRefId, df[df$Tran_Type == "ClientInstallment",], sum)
#  LoanRefId TransactionAmount
#1        11           1295.47
#2        12           3532.61

dplyr

library(dplyr)
df %>% 
  group_by(LoanRefId) %>% 
  filter(Tran_Type == "ClientInstallment") %>%
  summarise(TransactionAmount = sum(TransactionAmount))
#Source: local data frame [2 x 2]
#
#  LoanRefId TransactionAmount
#      (int)             (dbl)
#1        11           1295.47
#2        12           3532.61

数据表

setDT(df)[Tran_Type == "ClientInstallment", sum(TransactionAmount), by=LoanRefId]
#   LoanRefId      V1
#1:        11 1295.47
#2:        12 3532.61

请注意 data.table 语法是多么干净:)。很好的学习工具。

关于R ddply 仅汇总选定/特定/逻辑行的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33688150/

相关文章:

r - 使用 ddply 进行 cumsum

r - 检查组 R 中的任何前一行是否满足条件

python - 在shinyapps.io 上使用 python 3 in reticulate

python - 如何获取pandas中两个日期之间的工作日数

r - 如何使用 reshape/plyr 汇总数据?

r - 用于按索引对向量进行分区并在该分区上执行操作的惯用 R 代码

r - 在 R 中使用 dplyr 来识别一列与另一列中的任何行匹配的任何实例,按 id 分组

r - knitr 运行时需要 Rmd 的文件名

python - Dask:从 Parquet 写入/读取后索引不一致

r - 数据表列表的唯一列名