【问题标题】:Distribution of each element in list of lists列表列表中每个元素的分布
【发布时间】:2021-08-03 21:28:44
【问题描述】:

我有一个列表列表,其中每个列表中的元素保持不变( 虽然顺序不同)。我想研究每个元素的分布。我所说的分布是指直方图或密度。我怎样才能得到这个?我的数据:

list(c(schwab = 0.00994915446003192, pnc = 0.0985773383643284, 
spgl = 0.0989457597893213, jpm = 0.0990079895792143, gs = 0.0990363734280439, 
ms = 0.099056784373703, wf = 0.0990618144492384, brk = 0.0990633926174267, 
citi = 0.0990754278035443, amex = 0.0991123407844777, bofa = 0.0991136243506701
), c(schwab = 0.00994488828441379, pnc = 0.0988627257432064, 
ms = 0.0989267474709861, brk = 0.0989337348865835, spgl = 0.0989745965773393, 
bofa = 0.0990184496435375, amex = 0.0990437937277913, wf = 0.0990610587989401, 
citi = 0.0990714207311522, jpm = 0.0990723089976379, gs = 0.099090275138412
), c(schwab = 0.0490474068006088, spgl = 0.073555097335487, gs = 0.0845876715369239, 
pnc = 0.0862224504931484, amex = 0.0895822119835375, bofa = 0.0969446054813239, 
brk = 0.0986640083812554, ms = 0.0992945187918011, wf = 0.100311337105341, 
citi = 0.108971832231486, jpm = 0.112818859859087))

【问题讨论】:

  • 准确地说,您有一个 listvectors。你想要什么作为输出? 3 个直方图,3 个向量各有一个?
  • 每个股票代码的直方图。每个股票代码是 3 点,这是因为这只是我数据的一个样本。 @thelatemail

标签: r list distribution


【解决方案1】:

不是一个非常优雅的解决方案,但你可以。如果您在某些时期缺少一些数据,则无法扩展/工作。

我们的想法是获得宽格式,然后在每列上应用直方图。

# Store data
test <- list(c(schwab = 0.00994915446003192, pnc = 0.0985773383643284, 
spgl = 0.0989457597893213, jpm = 0.0990079895792143, gs = 0.0990363734280439, 
ms = 0.099056784373703, wf = 0.0990618144492384, brk = 0.0990633926174267, 
citi = 0.0990754278035443, amex = 0.0991123407844777, bofa = 0.0991136243506701
), c(schwab = 0.00994488828441379, pnc = 0.0988627257432064, 
ms = 0.0989267474709861, brk = 0.0989337348865835, spgl = 0.0989745965773393, 
bofa = 0.0990184496435375, amex = 0.0990437937277913, wf = 0.0990610587989401, 
citi = 0.0990714207311522, jpm = 0.0990723089976379, gs = 0.099090275138412
), c(schwab = 0.0490474068006088, spgl = 0.073555097335487, gs = 0.0845876715369239, 
pnc = 0.0862224504931484, amex = 0.0895822119835375, bofa = 0.0969446054813239, 
brk = 0.0986640083812554, ms = 0.0992945187918011, wf = 0.100311337105341, 
citi = 0.108971832231486, jpm = 0.112818859859087))

# Change vectors to dataframe for each time
test_list <- lapply(test, function(x) {
  data.frame(value = x) %>%
    mutate(ticker = names(x))
})

# Rbind all list elements together
test_df <- do.call(rbind, test_list) %>%
  # Add row id corresponding to time
  mutate(
    time = rep(c(1:length(test)), 
               each = length(test[[1]]))
    )

# Pivot wider
test_wide <- test_df %>%
  pivot_wider(everything(), values_from = value,
              names_from = ticker)

# Apply on each column to produce histogram (swap out to ggplot if you want)
lapply(test_wide, function(x) {
  x %>% hist()
})

【讨论】:

    【解决方案2】:

    这是你想要的吗?

    > split(do.call(rbind, Map(function(x,y) cbind(stack(x),grp = y), lst, seq_along(lst))), ~ind)
    $schwab
            values    ind grp
    1  0.009949154 schwab   1
    12 0.009944888 schwab   2
    23 0.049047407 schwab   3
    
    $pnc
           values ind grp
    2  0.09857734 pnc   1
    13 0.09886273 pnc   2
    26 0.08622245 pnc   3
    
    $spgl
           values  ind grp
    3  0.09894576 spgl   1
    16 0.09897460 spgl   2
    24 0.07355510 spgl   3
    
    $jpm
           values ind grp
    4  0.09900799 jpm   1
    21 0.09907231 jpm   2
    33 0.11281886 jpm   3
    
    $gs
           values ind grp
    5  0.09903637  gs   1
    22 0.09909028  gs   2
    25 0.08458767  gs   3
    
    $ms
           values ind grp
    6  0.09905678  ms   1
    14 0.09892675  ms   2
    30 0.09929452  ms   3
    
    $wf
           values ind grp
    7  0.09906181  wf   1
    19 0.09906106  wf   2
    31 0.10031134  wf   3
    
    $brk
           values ind grp
    8  0.09906339 brk   1
    15 0.09893373 brk   2
    29 0.09866401 brk   3
    
    $citi
           values  ind grp
    9  0.09907543 citi   1
    20 0.09907142 citi   2
    32 0.10897183 citi   3
    
    $amex
           values  ind grp
    10 0.09911234 amex   1
    18 0.09904379 amex   2
    27 0.08958221 amex   3
    
    $bofa
           values  ind grp
    11 0.09911362 bofa   1
    17 0.09901845 bofa   2
    28 0.09694461 bofa   3
    

    【讨论】:

      猜你喜欢
      • 2022-07-25
      • 1970-01-01
      • 2014-06-09
      • 1970-01-01
      • 2020-12-29
      • 2022-01-05
      • 2023-03-19
      • 2020-01-10
      • 1970-01-01
      相关资源
      最近更新 更多