【问题标题】:R which samples were drawn randomly from matrix?R 哪些样本是从矩阵中随机抽取的?
【发布时间】:2013-10-02 23:14:49
【问题描述】:

我正在尝试确定从每行中随机采样的矩阵中采样了哪些列。函数 sample 似乎无法告诉您实际采样了哪些位置。现在,如果所有值都是唯一的,那么一个简单的匹配例程就可以解决这个问题。但是,它们不是我的情况,所以这行不通。

x <- c(2,3,5,1,6,7,2,3,5,6,3,5)
y <- matrix(x,ncol=4,nrow=3)
random <- t(apply(y,1,sample,2,replace=FALSE))

是的

   [,1] [,2] [,3] [,4]
[1,]    2    1    2    6
[2,]    3    6    3    3
[3,]    5    7    5    5

随机

     [,1] [,2]
[1,]    2    6
[2,]    3    3
[3,]    5    5

对于原始矩阵中的重复值,我无法判断 random[1,1] 是从第 1 列还是第 3 列采样的,因为它们的值都是 2。因此,匹配在这里不起作用。

伴随矩阵“随机”,我还想要一个矩阵,该矩阵在大小相同的矩阵中给出从其中对每个值进行采样的列。比如:

     [,1] [,2]
[1,]    1    4
[2,]    1    3
[3,]    3    4

谢谢!

【问题讨论】:

    标签: r sample random-sample


    【解决方案1】:

    您需要单独保存来自sample 的随机选择,这样您以后不必担心匹配。例如,再次使用y

    y
    #     [,1] [,2] [,3] [,4]
    #[1,]    2    1    2    6
    #[2,]    3    6    3    3
    #[3,]    5    7    5    5
    
    set.seed(42)
    randkey <- t(replicate(nrow(y),sample(1:ncol(y),2)))
    #     [,1] [,2]
    #[1,]    4    3
    #[2,]    2    3
    #[3,]    3    2
    
    random <- matrix(y[cbind(c(row(randkey)), c(randkey))], nrow(y))
    #     [,1] [,2]
    #[1,]    6    2
    #[2,]    6    3
    #[3,]    5    7
    

    【讨论】:

    • @flodel - 谢谢 - 我已经编辑了你的评论 - 它更简单,几乎可以肯定更快。
    • +1。如果速度很重要,请查看microbenchmark(sample(1:4,2),sample.int(4,2))(后者大约需要一半时间)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多