【问题标题】:Random number selection from a data-frame从数据帧中选择随机数
【发布时间】:2014-05-14 18:35:03
【问题描述】:

我按照 Bernaard & Sijtsma (2000) 用于缺失数据插补的双向方法概述的步骤创建了一个“错误”数据框。为了完成我对缺失数据的计算,我需要从这个错误数据框中随机选择一个 SINGLE NUMBER 并将其添加到我已经计算的缺失数据值中。

我熟悉 sample() 函数,但我不是在寻找一行或一列的随机样本,而是寻找数据框中的一个单独的单元格。有没有一种简单的方法可以做到这一点,例如单个“选择随机数()”命令?有没有我尚未探索的替代方法?

非常感谢任何帮助。

【问题讨论】:

  • 您能否提供一个示例来说明您的数据框是什么样的?可重现的代码将有助于吸引有用的答案:)

标签: r random statistics dataframe


【解决方案1】:

如果您可以转换为 matrix 而不是 dataframe 会更容易,但前提是您需要保留不同的数据类型或某些此类限制,

foo<-as.data.frame(matrix(runif(20),nrow=4,ncol=5))
foo[sample(1:nrow(foo)),sample(1:ncol(foo))]

将选择一个随机元素。

【讨论】:

    【解决方案2】:

    与@CarlWitthoft 的回答类似,您可以将数据框转换回矩阵,以确保您对随机单元格进行采样

    > set.seed(10)
    > M <- data.frame(matrix(runif(20), nrow = 4, ncol = 5))
    > M
    #          X1         X2        X3        X4         X5
    # 1 0.5074782 0.08513597 0.6158293 0.1135090 0.05190332
    # 2 0.3067685 0.22543662 0.4296715 0.5959253 0.26417767
    # 3 0.4269077 0.27453052 0.6516557 0.3580500 0.39879073
    # 4 0.6931021 0.27230507 0.5677378 0.4288094 0.83613414
    
    > sample(as.matrix(M), 1)  
    # [1] 0.2641777            ## came from row 2, column 5
    > sample(as.matrix(M), 1)  
    # [1] 0.113509             ## came from row 1, column 4
    > sample(as.matrix(M), 1)  
    # [1] 0.4288094            ## came from row 4, column 4
    > sample(as.matrix(M), 1)  
    # [1] 0.2723051            ## came from row 4, column 2
    

    seq(as.matrix(M)) 将显示所有单元格编号(从上到下,从左到右)。你也可以从中取样。

    > seq(as.matrix(M))
    # [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
    > sample(seq(as.matrix(M)), 1)
    # [1] 15
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-19
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多