Build net.acc() function.

net.acc() creates a data frame of net calculations by account.
This commit is contained in:
Matt
2016-04-13 08:04:45 -05:00
parent e4ed723c62
commit 89bcc5dc45

View File

@ -24,10 +24,12 @@ journal<-rbind(journal1,journal2)
## Clean up ## Clean up
# Date is date # Date is date
journal$Date<-as.Date(journal$Date,format="%m/%d/%Y") journal$Date<-as.Date(journal$Date,format="%m/%d/%Y")
# Replace empty classes # Replace empty classes and accounrs
journal$Class[journal$Class==""]<-c("unclassified") journal$Class[journal$Class==""]<-c("unclassified")
# Class is a factor journal$Account[journal$Account==""]<-c("unclassified")
# Class, Accounts are factors
journal$Class<-as.factor(journal$Class) journal$Class<-as.factor(journal$Class)
journal$Account<-as.factor(journal$Account)
# Empty class should be NA # Empty class should be NA
# Debit and Credit are numeric, without commas # Debit and Credit are numeric, without commas
journal$Debit<-as.numeric(sub(",","",journal$Debit)) journal$Debit<-as.numeric(sub(",","",journal$Debit))
@ -36,15 +38,18 @@ journal$Credit<-as.numeric(sub(",","",journal$Credit))
## Temp function location ## Temp function location
# TODO learn where to store functions # TODO learn where to store functions
########## net() function, takes journal, class name(s), and date range as arguments ########## net() function, takes journal, class name(s), and date range as arguments
net<-function(journ,classselect="all",dates="all"){ net<-function(journ,classselect="all",accselect="all",dates="all"){
if("all" %in% classselect) { if("all" %in% classselect) {
classselect<-levels(journ$Class) classselect<-levels(journ$Class)
} }
if("all" %in% accselect) {
accselect<-levels(journ$Account)
}
if("all" %in% dates) { if("all" %in% dates) {
dates<-c(min(journ$Date),max(journ$Date)) dates<-c(min(journ$Date),max(journ$Date))
} }
net<-sum(journ$Credit[journ$Class %in% classselect & journ$Date>=dates[1] & journ$Date<=dates[2]], net<-sum(journ$Credit[journ$Class %in% classselect & journ$Account %in% accselect & journ$Date>=dates[1] & journ$Date<=dates[2]],
na.rm=T)-sum(journ$Debit[journ$Class %in% classselect & journ$Date>=dates[1] & journ$Date<=dates[2]], na.rm=T)-sum(journ$Debit[journ$Class %in% classselect & journ$Account %in% accselect & journ$Date>=dates[1] & journ$Date<=dates[2]],
na.rm=T) na.rm=T)
return(net) return(net)
} }
@ -63,9 +68,9 @@ net.class.out<-data.frame(Class=character(),
# Loop through classes, calculate net, and add to data frame # Loop through classes, calculate net, and add to data frame
for (i in 1:length(classselect)) { for (i in 1:length(classselect)) {
net.class.out[i,] <- c(classselect[i], net.class.out[i,] <- c(classselect[i],
net(journal, net(journ,
classselect[i], classselect=classselect[i],
"all")) dates="all"))
} }
# Add total net row # Add total net row
if(total) { if(total) {
@ -75,6 +80,34 @@ return(net.class.out)
} }
########## ##########
#work in progress
########## Net table by account
net.acc<-function(journ,accselect="all",dates="all",total=F) {
# List of classes
if("all" %in% accselect) {
accselect<-unique(journ$Account)
}
# Set up data frame
net.acc.out<-data.frame(Account=character(),
Net=numeric(),
stringsAsFactors=FALSE)
# Loop through accounts, calculate net, and add to data frame
for (i in 1:length(accselect)) {
net.acc.out[i,] <- c(as.character(accselect[i]),
net(journ,
accselect=accselect[i],
dates=dates))
}
# Sort by account name
net.acc.out<-net.acc.out[order(Account) , ]
# Add total net row
if(total) {
net.acc.out[nrow(net.acc.out)+1,]<-c("Total",net(journal))
}
return(net.acc.out)
}
##########