Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Multiple functions in aggregate

Tags:

r

aggregate

Is is possible that from the following data frame df1

 Branch Loan_Amount TAT
      A         100 2.0
      A         120 4.0
      A         300 9.0
      B         150 1.5
      B         200 2.0

I can use aggregate function to get the following output as a dataframe df2

 Branch Number_of_loans Loan_Amount Total_TAT
      A               3         520      15.0
      B               2         350       3.5

I know I can use nrow to calculate the number_of_loans and merge, but I am looking for a better method.

like image 622
Anubhav Dikshit Avatar asked Sep 21 '25 13:09

Anubhav Dikshit


1 Answers

Base package:

df1 <- aggregate(.~ Branch, df, FUN = "sum")
df2 <- setNames(aggregate(Loan_Amount~Branch, df, length)[2], c("Number_of_loans"))
cbind(df1, df2)

Output

  Branch Loan_Amount  TAT Number_of_loans
1      A         520 15.0               3
2      B         350  3.5               2

Package sqldf:

library(sqldf)
sqldf("SELECT Branch, COUNT(Loan_Amount) Number_of_loans, SUM(Loan_Amount) Loan_Amount, SUM(TAT) TAT 
      FROM df 
      GROUP BY Branch")

Output

  Branch Number_of_loans Loan_Amount  TAT
1      A               3         520 15.0
2      B               2         350  3.5

Data

df <- structure(list(Branch = structure(c(1L, 1L, 1L, 2L, 2L), .Label = c("A", 
"B"), class = "factor"), Loan_Amount = c(100L, 120L, 300L, 150L, 
200L), TAT = c(2, 4, 9, 1.5, 2)), .Names = c("Branch", "Loan_Amount", 
"TAT"), class = "data.frame", row.names = c(NA, -5L))
like image 169
mpalanco Avatar answered Sep 23 '25 03:09

mpalanco