【问题标题】:Replicate simulations and For Loop in R在 R 中复制模拟和 For 循环
【发布时间】:2019-09-07 02:54:11
【问题描述】:

大家好,对不起,我是 R 的初学者。

我有一个 Excel 表格:

Fund count
1 1961
2 2086
3 453
...

我想要做的是:对于每个基金,我想运行 1000 次模拟,其中我从1001:24999 范围内抽取随机数的次数与该基金的count 相同。然后,计算出有多少随机数小于 6000。最后,获得 1000 次模拟的平均值。

将文件导入RStudio后,写到此为止:

#count for the first fund in the table
z <- replicate(1000, {1001:24449, replace=T, size=1961})
count<-length(which(z>6000))
mean(count)

我似乎可以将上述内容用于一个基金,并且我知道我应该为所有基金使用 for 循环。

我完全是新手,任何反馈都将不胜感激!!!

【问题讨论】:

    标签: r


    【解决方案1】:

    您可以执行以下操作:

    对于data.frame 中的每个count 值,从1001:24999 中抽取尽可能多的样本并进行替换,并返回小于6000 的样本值;重复Nsim = 1000 次。

    Nsim <- 1000
    lst <- replicate(Nsim, lapply(
        apply(df, 1, function(x) sample(1001:24999, x["count"], replace = T)),
        function(x) sum(x < 6000)))
    

    matrix 中存储Nsim 列,行数与原始data.frame 中的行数一样多。

    mat <- matrix(unlist(lst), ncol = Nsim)
    

    计算每一行的平均值。

    rowMeans(mat)
    #[1] 409.215 433.868  93.973
    

    样本数据

    df <- read.table(text =
        "Fund count
    1 1961
    2 2086
    3 453", header = T)
    

    【讨论】:

    • 不客气@user11370994;请考虑通过在答案旁边设置绿色复选标记来关闭问题。这样一来,您就可以帮助保持整洁,并使未来的用户更容易识别相关问题。它还为原始发布者和受访者提供少量声誉奖励。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-30
    • 1970-01-01
    • 2021-02-15
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 2021-06-19
    相关资源
    最近更新 更多