R 创建5个随机抽样观测平均值的数据帧

R 创建5个随机抽样观测平均值的数据帧,r,logic,sample,tapply,rep,R,Logic,Sample,Tapply,Rep,我目前正在阅读“数据科学家的实用统计”,并在R中跟随他们演示一些代码。有一段代码我特别难以遵循其逻辑,希望有人能提供帮助。该代码正在创建一个包含1000行的数据框,其中每个观察值是从数据框中随机抽取的5个收入值的平均值loans\u income。但是,我对代码的逻辑感到困惑,因为它与tapply()函数和嵌套的rep()语句相当复杂 创建相关数据帧的代码如下所示: samp_mean_5 <- data.frame(income = tapply(sample(loans_income$

我目前正在阅读“数据科学家的实用统计”,并在R中跟随他们演示一些代码。有一段代码我特别难以遵循其逻辑,希望有人能提供帮助。该代码正在创建一个包含1000行的数据框,其中每个观察值是从数据框中随机抽取的5个收入值的平均值
loans\u income
。但是,我对代码的逻辑感到困惑,因为它与
tapply()
函数和嵌套的
rep()
语句相当复杂

创建相关数据帧的代码如下所示:

samp_mean_5 <- data.frame(income = tapply(sample(loans_income$income,1000*5),
                                          rep(1:1000,rep(5,1000)),
                                          FUN = mean),
           type='mean_of_5')

samp_意味着在一个向量中你有50000笔贷款收入。让我们详细分析一下您的代码:

tapply(样本(贷款收入$收入,1000*5),
代表(1:1000,代表(51000)),
乐趣=平均值)
我将用10代替1000,用随机数代替收入,这样更容易解释。我还设置了
set.seed(1)
,以便可以复制结果

  • 示例(贷款收入$income,1000*5)

    我们从你的矢量中随机抽取50个收入,不需要替换。它们(暂时)放入长度为50的向量中,因此输出如下所示:
  • rep(1:1000,rep(51000))

    现在,我们正在创建长度为50的索引向量:
  • 代表(1:10,代表(5,10)) [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 6 6 6 [29] 6 6 7 7 7 7 7 8 8 8 8 8 9 9 9 9 9 10 10 10 10 10
    这些索引将步骤1中的样本“分组”。因此,基本上这个向量告诉
    R
    “样本向量”的前5个条目属于一起(索引1),接下来的5个条目属于一起(索引2),依此类推

  • FUN=mean

    只需对数据应用
    mean
    -函数即可

  • tapply

    因此
    tapply
    获取采样数据(
    sample
    -part)并通过第二个参数(
    rep()
    -part)对其进行分组,并对每个分组应用
    mean
    -function

  • 如果您熟悉data.frames和
    dplyr
    程序包,请查看以下内容(仅显示前10行):

    set.seed(1)
    df%
    分组依据(指数)%>%
    汇总(平均值=平均值(收入))
    
    这给了我们

    # A tibble: 10 x 2
       index  mean
       <int> <dbl>
     1     1 0.551
     2     2 0.425
     3     3 0.827
     4     4 0.391
     5     5 0.590
     6     6 0.373
     7     7 0.514
     8     8 0.451
     9     9 0.566
    10    10 0.435
    
    结果基本相同:

    123456789
    0.5507529 0.4250946 0.8273149 0.3905850 0.5902823 0.3730092 0.5143829 0.4512932 0.5658460 
    10
    0.4352546
    
    你在一个向量中有50000笔贷款和收入。让我们详细分析一下您的代码:

    tapply(样本(贷款收入$收入,1000*5),
    代表(1:1000,代表(51000)),
    乐趣=平均值)
    
    我将用10代替1000,用随机数代替收入,这样更容易解释。我还设置了
    set.seed(1)
    ,以便可以复制结果

  • 示例(贷款收入$income,1000*5)

    我们从你的矢量中随机抽取50个收入,不需要替换。它们(暂时)放入长度为50的向量中,因此输出如下所示:
  • rep(1:1000,rep(51000))

    现在,我们正在创建长度为50的索引向量:
  • 代表(1:10,代表(5,10)) [1] 1 1 1 1 1 2 2 2 2 2 3 3 3 3 3 4 4 4 4 4 5 5 5 5 5 6 6 6 [29] 6 6 7 7 7 7 7 8 8 8 8 8 9 9 9 9 9 10 10 10 10 10 这些索引将步骤1中的样本“分组”。因此,基本上这个向量告诉
    R
    “样本向量”的前5个条目属于一起(索引1),接下来的5个条目属于一起(索引2),依此类推

  • FUN=mean

    只需对数据应用
    mean
    -函数即可

  • tapply

    因此
    tapply
    获取采样数据(
    sample
    -part)并通过第二个参数(
    rep()
    -part)对其进行分组,并对每个分组应用
    mean
    -function

  • 如果您熟悉data.frames和
    dplyr
    程序包,请查看以下内容(仅显示前10行):

    set.seed(1)
    df%
    分组依据(指数)%>%
    汇总(平均值=平均值(收入))
    
    这给了我们

    # A tibble: 10 x 2
       index  mean
       <int> <dbl>
     1     1 0.551
     2     2 0.425
     3     3 0.827
     4     4 0.391
     5     5 0.590
     6     6 0.373
     7     7 0.514
     8     8 0.451
     9     9 0.566
    10    10 0.435
    
    结果基本相同:

    123456789
    0.5507529 0.4250946 0.8273149 0.3905850 0.5902823 0.3730092 0.5143829 0.4512932 0.5658460 
    10
    0.4352546
    
    感谢您的回复。(1.)与只键入“5000”相比,是否有将“1000*5”作为示例函数的第二个参数的约定?(或50,在您的示例中)(2)第二个嵌套的rep()函数满足哪个参数?看看这些文件,是《时代》杂志吗“争论?我知道这一步的总体目的是创建一个索引向量,但我想我很难理解它是如何做到的。我一直想深入研究dplyr包,因为到目前为止我对它的理解还很肤浅。但它看起来非常有用!谢谢你的邀请suggestion@cliftjc1我不知道什么惯例。我想做
    1000*5
    应该清楚地表明,您正在为1000次观察绘制每5个样本。将其分解为
    1000*5
    可以使您更容易地(为了建模的目的)将其替换为
    n*m
    ,使用可变数量的样本和观察值。(2)
    rep()
    的第二个参数是times参数。因此,对于第一个参数的每个条目,它包含重复的次数(在本例中:每个条目将重复5次)。请查看
    rep(1:10,1:10)
    。感谢您的回复。(1.)与只键入“5000”相比,是否有将“1000*5”作为示例函数的第二个参数的约定?(或5)