Files
ledgerr/working.Rmd
Matt 85348ae678 Add date selection to net() function.
I'm pretty impressed that I figured this out.
2016-04-12 22:31:33 -05:00

70 lines
2.3 KiB
Plaintext

---
title: "Untitled"
author: "Matt"
date: "April 7, 2016"
output: html_document
---
```{r setup, include=FALSE}
knitr::opts_chunk$set(echo = TRUE)
```
Should use this document for actual operations and keep actual functions in another document for the public [GitHub repo](https://github.com/mattbk/ledgerr). Shiny will be set up at https://www.shinyapps.io/admin/#/dashboard.
```{r}
# Use https://github.com/maxconway/gsheet
library(gsheet)
# Pull Google sheet locations from another file (journal1, journal2, etc.)
source("config.R")
# Combine bank accounts
journal<-rbind(journal1,journal2)
## Clean up
# Date is date
journal$Date<-as.Date(journal$Date,format="%m/%d/%Y")
# Replace empty classes
journal$Class[journal$Class==""]<-c("unclassified")
# Class is a factor
journal$Class<-as.factor(journal$Class)
# Empty class should be NA
# Debit and Credit are numeric, without commas
journal$Debit<-as.numeric(sub(",","",journal$Debit))
journal$Credit<-as.numeric(sub(",","",journal$Credit))
## Temp function location
# All time net, takes journal and class name(s) as an argument
# TODO add date selection, take two dates only e.g., c("2015-01-01","2015-12-31") and test first
net<-function(journ,classselect="all",dates="all"){
if("all" %in% classselect) {
classselect<-levels(journ$Class)
}
if("all" %in% dates) {
dates<-c(min(journ$Date),max(journ$Date))
}
net<-sum(journ$Credit[journ$Class %in% classselect & 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)
return(net)
}
# Net by class and date range
# TODO should be function that uses the net function above
# List of classes
classes<-levels(journal$Class)
# Set up data frame
net.byclass<-data.frame(Class=character(),
Net=numeric(),
stringsAsFactors=FALSE)
# Loop through classes, calculate net, and add to data frame
for (i in 1:length(classes))
{ net.byclass[i,] <- c(as.character(classes[i]), sum(journal$Credit[journal$Class==classes[i]], na.rm=T) - sum(journal$Debit[journal$Class==classes[i]],
na.rm=T))
}
# Add total net row
net.byclass[nrow(net.byclass)+1,]<-c("Total",net(journal))
# See other reports in QB and Ledger
```