【问题标题】:Remove x random entries from a vector从向量中删除 x 个随机条目
【发布时间】:2014-01-17 18:27:07
【问题描述】:

我有一个大向量:

a<-1:1000
a<-sample(a,replace=F)
b<-sample(1:10,1)

我想从a 中随机删除“b”个条目。如何做到这一点?

【问题讨论】:

  • adel &lt;- a[-sample(seq_along(a),size=b,replace=FALSE))]
  • note replace=FALSE 是默认值,但有时当您不记得默认值是什么时,为了清楚起见可以方便地保留。
  • 去掉a的第一个元素或者a的一个随机元素,如果a被打乱了就一样了。

标签: r


【解决方案1】:

a的长度无关紧要,让我们做一个更短的例子:

> a=1:20
> a=sample(a,replace=FALSE)
> a
 [1]  9 11 16 15 10 18  8  7  4  2 14  5 12 20  6  1 13 19  3 17
> b=sample(1:10,1)
> b
[1] 3
> a=a[-sample(1:length(a),b)]
> a
 [1]  9 11 16 15 10 18  7  4  2 14 12 20  6  1 13 19  3
> length(a)
[1] 17

这里的诀窍是从 1:length(a) 中提取长度为 b 的样本,然后使用负索引对子集进行索引。

【讨论】:

    【解决方案2】:

    如果要将a 中的b 值设置为NA,则:

    a[sample(1:length(a), b)] <- NA
    

    如果您想从a 中删除b 值,则:

    a <- a[-sample(1:length(a), b)]
    

    【讨论】:

      猜你喜欢
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      • 2017-12-06
      • 2011-06-16
      • 1970-01-01
      • 2014-09-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多