簡體   English   中英

R:根據數據計數生成直方圖

[英]R: Generate histogram from counts of data

假設我有矢量a

c(1, 6, 2, 4.1, 1, 2)

一個計數向量b

c(2,3,2,1,1,0)

我想生成向量c

c(1, 1, 6, 6, 6, 2, 2, 4.1, 1)

致電:

hist(c)

我如何構建c ,或者有沒有辦法直接從ab生成直方圖? 請注意,在重復a ,以及不平等的間距。

需要矢量化解決方案。 ab對於lapply和朋友來說太大了。

?rep

> rep(a, b)
[1] 1.0 1.0 6.0 6.0 6.0 2.0 2.0 4.1 1.0
> 

編輯,因為我很好奇!

a <- sample(1:10, 1e6, replace=TRUE)
b <- sample(1:10, 1e6, replace=TRUE)

> system.time(rep(a, b))
   user  system elapsed 
  0.140   0.016   0.156 
> system.time(inverse.rle(list(lengths=b, values=a)))
   user  system elapsed 
  0.024   0.004   0.028 

只是為了與rep不同的東西:

> inverse.rle(list(lengths=b,values=a))
[1] 1.0 1.0 6.0 6.0 6.0 2.0 2.0 4.1 1.0

一些基准測試和更快的解決方案。 rep.int是標准用例中rep的更快實現(來自?rep

rep.int(a, b)

我不相信上面的基准測試

inverse.rle僅僅是一個包裝rep.int rep.int應該比rep快。 我認為inverse.rlewrapper組件應該比rep()作為基本函數的解釋慢

一些微基准測試

library(microbenchmark)

microbenchmark(rep(a,b), rep.int(a,b), 
      inverse.rle(list(values = a, lengths =b)))
Unit: milliseconds
                                        expr      min       lq   median       uq
1 inverse.rle(list(values = a, lengths = b)) 29.06968 29.26267 29.36191 29.67501
2                                  rep(a, b) 25.65125 25.76246 25.84869 26.52348
3                              rep.int(a, b) 20.38604 23.31840 23.38940 23.69600
       max
1 72.80645
2 69.00169
3 66.40759

其中沒有多少,但rep.int似乎是贏家 - 它應該是。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM