首页 > 解决方案 > R:随机采样向量中的一个非零元素,并将其他元素替换为 0

问题描述

假设我有一个向量

vec <- c(0, 1, 0, 0, 0, 1, 1, 1, 1, 2)

如何随机采样一个非零元素并将其他元素变为 0?

假设采样的元素是 vec[2],那么结果向量将是

vec <- c(0, 1, 0, 0, 0, 0, 0, 0, 0, 0)

我知道我可以通过 sample(which(vec != 0), 1) 对一个非零元素的索引进行采样,但我不知道如何着手。谢谢!

标签: rvectorsample

解决方案


你可以试试下面的代码

> replace(0 * vec, sample(which(vec != 0), 1), 1)
 [1] 0 0 0 0 0 0 0 1 0 0

在哪里

  • which返回非零值的索引
  • sample给出一个随机索引
  • replace将值替换为1特定索引处

推荐阅读