【问题标题】:How to randomly pick a % of observations from a matrix in R?如何从 R 中的矩阵中随机选择 % 的观察值?
【发布时间】:2021-07-13 11:30:22
【问题描述】:

我有一个矩阵,我想随机选择矩阵中 10% 的元素,并将这些元素存储到一个数据框索引行、列和值中。

我想说明我对随机抽样行和列感兴趣,所以我对部分解决方案不感兴趣,即抽样 10% 的行并选择所有列,或者相反,抽样 10%列并选择所有行。

例如,

M = matrix(rnorm(30), 10, 3)

给定这个包含 30 个不同元素的矩阵,我想随机抽取其中的 10% (0.1 * 30 = 3) 并将它们存储在表单的数据集中

row  column  value
 4     2      x
 7     1      x
 2     1      x

【问题讨论】:

    标签: r matrix


    【解决方案1】:

    您可以使用来自seq_along 的向量中的sample,并使用arrayIndcbind 获取行和列以及矩阵的值。

    i <- sample(seq_along(M), length(M) %/% 10)
    cbind(arrayInd(i, dim(M)), M[i])
    #cbind(arrayInd(i, dim(M), c("row", "column"), TRUE), value = M[i]) #Alternative with names
    #     [,1] [,2]        [,3]
    #[1,]    5    1 -0.72818419
    #[2,]    9    1  1.14609041
    #[3,]    2    2  0.01162598
    

    【讨论】:

      【解决方案2】:

      将二维矩阵视为一维长数组,即从逻辑上解开它,而不是平息它。
      然后得到 0.1 * len(matrix) * len(matrix[0]) rand 数字从 0 到 len(matrix-1)*len(matrix[0]-1)

      例如,您有一个 rand 号:randVar,
      那么可以用row and col的形式表示

      row = randVar / len(matrix[0])  
      col = randVar % len(matrix[0])  
      

      【讨论】:

        最近更新 更多