library(linprog)
## Loading required package: lpSolve
ROI <- c(9/100,18/100,26/100,11/100)
bVect <- c(1180000, 0, 0, -200000, -80000, -60000, 220000, 0, 16200000)
AMatrix <- rbind(
  c(1,1,1,1), # TOTAL
  c(0.6,-0.4,-0.4,0.6), # SEO + AdWords > 60%
  c(-0.2,-0.2,-0.2,0.8), # FB < 20%
  c(-1,0,0,0), # Min TV
  c(0,0,0,-1), # Min FB
  c(0,-1,0,0), # Min SEO
  c(0,1,0,0), # Max SEO
  c(0,-3,1,0), # Adwords <= 3 SEO
  c(2.5,4.30,0.90,3.0) # Campaign reach
)

lpsol <- solveLP(ROI, bVect, AMatrix, TRUE)

OptROI <- paste0("$", formatC(as.numeric(lpsol$opt), format="f", digits=0, big.mark=","))
TVSpend <- paste0("$", formatC(as.numeric(lpsol$solution[1]), format="f", digits=0, big.mark=","))
SEOSpend <- paste0("$", formatC(as.numeric(lpsol$solution[2]), format="f", digits=0, big.mark=","))
AdwordsSpend <- paste0("$", formatC(as.numeric(lpsol$solution[3]), format="f", digits=0, big.mark=","))
FacebookSpend <- paste0("$", formatC(as.numeric(lpsol$solution[4]), format="f", digits=0, big.mark=","))

plot_df <- data.frame(Description=c('Optimum ROI','TV Spend','SEO Spend','Adwords Spend','Facebook Spend'),
                      Value=c(OptROI,TVSpend,SEOSpend,AdwordsSpend,FacebookSpend))


library(gtable)
library(gridExtra)
library(grid)
tt <- ttheme_minimal(
  core=list(bg_params = list(fill = blues9[1:5], col=NA),
            fg_params=list(fontface=1,fontsize=20)),
  colhead=list(fg_params=list(col="navyblue", fontface=1,fontsize=20)))

g <- tableGrob(plot_df[1:5,], rows = NULL,theme=tt)
g <- gtable_add_grob(g,
                     grobs = rectGrob(gp = gpar(fill = NA, lwd = 2)),
                     t = 2, b = nrow(g), l = 1, r = ncol(g))
g <- gtable_add_grob(g,
                     grobs = rectGrob(gp = gpar(fill = NA, lwd = 2)),
                     t = 1, l = 1, r = ncol(g))
grid.newpage()
grid.draw(g)