【问题标题】:Duplicating rows in R matrix在 R 矩阵中复制行
【发布时间】:2018-02-28 03:35:13
【问题描述】:

我有一个小矩阵,比如说

x <- matrix(1:10, nrow = 5) # values 1:10 across 5 rows and 2 columns

结果是

     [,1] [,2]
[1,]    1    6
[2,]    2    7
[3,]    3    8
[4,]    4    9
[5,]    5   10

我现在想做的是在 x 中复制随机行;例如,生产

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

我相信 R 函数 'rep()' 是解决方案,也是 'sample()',但我不想在 sample() 中指定 size 参数;即,我希望每次都复制任意数量的行。

有没有使用 rep() 和 sample() 完成此任务的简单方法?

【问题讨论】:

  • @bouncyball 您刚刚删除的实现有效。我会为其他有同样问题的人添加它。
  • 我对 sample() 的 size 参数有点困惑,认为它必须用 nrow(x) 以外的东西指定
  • 如果我的实现解决了你的问题,你可以考虑投票和/或接受我的回答

标签: r sample rep


【解决方案1】:

我们可以使用sample 函数。我使用set.seed 来实现可重复性,如果删除该行,结果应该会改变。

set.seed(1848) # reproducibility
x[sample(x = nrow(x), size = nrow(x), replace = T), ]

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

【讨论】:

    【解决方案2】:

    另一个选项可以作为样本 row number 并将其替换为另一个样本 row number。它将是:

    x[sample(1:nrow(x),1),] <- x[sample(1:nrow(x),1),]
    
    
    x
    #     [,1] [,2]
    #[1,]    5   10
    #[2,]    2    7
    #[3,]    3    8
    #[4,]    4    9
    #[5,]    5   10
    

    仅复制最多 3 个随机行,解决方案可能是:

    x[sample(1:nrow(x),3),] <- x[sample(1:nrow(x),3),]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-06
      • 2012-10-13
      • 2020-02-08
      • 2016-08-30
      • 1970-01-01
      • 1970-01-01
      • 2017-04-13
      • 2013-02-02
      相关资源
      最近更新 更多