【问题标题】:R - randomly picking columns to sum up row valuesR - 随机选择列来总结行值
【发布时间】:2020-07-16 19:15:55
【问题描述】:

我有一个包含 20 列和 1000 行的数据集,使用以下方法生成:

sim_data <- do.call(cbind, replicate(20, rexp(1000, 1/120), simplify = FALSE))

如何在每行中随机选取列数来将它们的值相加,并有一列指示选取了多少列?

我有:

picked <- sim_data[sample(nrow(sim_data), 5)]
sim_data$Sum <- sum(picked)
sim_data$Number <- length(picked)

但是如何从 1 到 20 中选择一个随机大小,而不是“5”,然后在所有行上重复?

【问题讨论】:

    标签: r loops simulation


    【解决方案1】:

    我们可以使用apply

    cbind(sim_data, t(apply(sim_data,1, function(x) {
           i1 <- sample(seq_along(x), 1)
           out <- sum(sample(x, i1))
           c(Length = i1, Sum = out)
         }
            )))
    

    【讨论】:

    • 谢谢你的作品。现在我如何添加一个列来指示选择了多少个值(即样本大小)?
    • @N.J 这里,每行 5 个值。您是否每行采用不同的值
    • @N.J.如果要创建大小列sim_data$size &lt;- 5
    • 哦,那么这并不能回答我的困境。我需要它来选择一个从 1 到 20 的随机数,而不是 5。5 就是一个例子。
    猜你喜欢
    • 2011-08-22
    • 1970-01-01
    • 1970-01-01
    • 2012-09-17
    • 2021-10-28
    • 1970-01-01
    • 2012-03-12
    • 2021-11-17
    • 2011-06-30
    相关资源
    最近更新 更多