2016-12-13 71 views
1

我正在尋找一種可以在一天中查看庫存的方法。該數據集如下所示,隨着最後兩列下面的摘要:R中的直方圖跟蹤庫存水平

    Time Price Inventory Duration 
1 9/1/2016 9:25:06 AM 13.960 318  0 
2 9/1/2016 9:36:42 AM 13.980 106  696 
3 9/1/2016 9:40:52 AM 13.990 -599  250 
4 9/1/2016 9:52:54 AM 14.015  68  722 
5 9/1/2016 9:52:54 AM 14.015 321  0 
6 9/1/2016 9:54:17 AM 14.010  74  83 

庫存

Min. 1st Qu. Median  Mean 3rd Qu.  Max. 
-1120.00 -98.75  9.00  0.00 100.00 1988.00 

時間

Min. 1st Qu. Median  Mean 3rd Qu.  Max. 
0.00  40.25 205.50 2100.00 529.00 272700.00 

我想通過展示多少時間,可視化數據花費在各種庫存水平上。你會推薦什麼作爲這個功能?到目前爲止,我只找到基於頻率的直方圖,而不是時間。我預期的結果將類似於此:

https://postimg.org/image/z074waij1/

在此先感謝

+0

你可以用這個試試:'barplot(prop.table(表(DF $ Inventroy,DF $持續時間)),旁邊= T)' – Dan

回答

0

我寫了下面的功能滿足我的需要。希望它可以幫助

inv.barplot.IDs <- function(inv.list, IDs = 1:1620) 
    { 
    # Subset according to the IDs 
    myinvs <- as.data.frame(matrix(nrow = 0, ncol = 14)) 
    names(myinvs) <- inv.names 
    Volume <- Duration <- vector("numeric") 

    for (i in IDs) 
    { 
     #myinvs <- rbind(myinvs, inv.list[[i]]) 
     Volume <- c(Volume, as.numeric(inv.list[[i]]$Volume)) 
     Duration <- c(Duration, as.numeric(inv.list[[i]]$Duration)) 
    } 

    # Design a sequence of skatules 
    minimum <- min(Volume) 
    maximum <- max(Volume) 
    width <- (maximum + abs(minimum))/18 
    width <- round(width, -1) 
    seq.pos <- seq(width, maximum + width, by = width) 
    seq.neg <- - seq(0, abs(minimum) + width, by = width) 
    seq <- c(rev(seq.neg), seq.pos) 

    # Categorize the dataframe (new column) 
    Skatule <- numeric(length = length(Volume)) 
    for (i in 1:length(Volume)) 
    { 
     Skatule[i] <- seq[head(which(seq > Volume[i]), 1) - 1] 
    } 

    barplot.data <- tapply(Duration, Skatule, sum) 

    # Save the barplot 
    #jpeg(filename = file.barplot, width = 480 * (16/9)) 
    inv.barplot <- barplot(barplot.data, border = NA, ylim = c(0, max(barplot.data)), main = "Total time spent on various inventory levels", xlab = "Inventory", ylab = "Log of Hours") 
    #print(inv.barplot) 
    #dev.off() 
    }