【问题标题】:Calculate cumulative mean for dataset randomized 100 times计算随机化 100 次的数据集的累积平均值
【发布时间】:2021-11-16 02:04:00
【问题描述】:

我有一个数据集,我想将这个数据集的顺序随机化 100 次,每次都计算累积平均值。

# example data
ID <- seq.int(1,100)
val <- rnorm(100)
df <- cbind(ID, val) %>% 
      as.data.frame(df)

我已经知道如何使用 dplyr 中的函数“cummean()”计算累积平均值。

df2 <- df %>% 
       mutate(cm = cummean(val))

但是,我不知道如何将数据集随机化 100 次并将 cummean() 函数应用于数据帧的每次迭代。任何有关如何执行此操作的建议将不胜感激。

我意识到这可能通过循环或 tidyverse 来解决,我对任何一种解决方案都持开放态度。

此外,如果可能的话,我想包括一列,指示数据是从哪个迭代生成的(即随机化 #1、#2、...、#100),并包括“ID " 值,表示累积平均值中包含多少数据值。提前致谢!

【问题讨论】:

  • 看看sample函数help(sample)

标签: r loops iteration tidyverse mean


【解决方案1】:

这是一种使用purrr 包的方法。另外,不确定cummean 正在计算什么(也许有人可以在 cmets 中分享),所以我提供了一个替代方案,cm2 列作为比较。

library(tidyverse)

set.seed(2000)

num_iterations <- 100
num_sample <- 100

1:num_iterations %>%
  map_dfr(
    function(i) {
      tibble(
        iteration = i, 
        id = 1:num_sample, 
        val = rnorm(num_sample), 
        cm = cummean(val), 
        cm2 = cumsum(val) / seq_along(val)
      )
    }
  )

【讨论】:

    【解决方案2】:

    您可以变异创建 100 个样本,然后调用 cummean:

    library(dplyr)
    library(purrr)
    
    df %>% mutate(map_dfc(1:100, ~cummean(sample(val))))
    

    【讨论】:

      【解决方案3】:

      我们可以使用purrr中的rerun

      library(dplyr)
      library(purrr)
      f1 <- function(dat, valcol) {
                dat %>% 
                  sample_n(size = n()) %>%
                   mutate(cm = cummean({{valcol}}))
         }
      n <- 100
      out <- rerun(n, f1(df, val))
      

      rerun的输出是list,我们可以用序列来命名它,如果我们需要通过绑定创建一个新列,使用bind_rows

      out1 <- bind_rows(out, .id = 'ID')
      > head(out1)
        ID        val          cm
      1  1  0.3376980  0.33769804
      2  1 -1.5699384 -0.61612019
      3  1  1.3387892  0.03551628
      4  1  0.2409634  0.08687807
      5  1  0.7373232  0.21696708
      6  1 -0.8012491  0.04726439
      

      【讨论】:

        猜你喜欢
        • 2012-06-19
        • 2017-09-28
        • 1970-01-01
        • 2011-12-15
        • 2016-09-26
        • 2016-07-11
        • 2017-11-29
        相关资源
        最近更新 更多