R:随机抽取一个向量中的非零元素,并将其他元素替换为0
R: randomly sample a nonzero element in a vector and replace other elements with 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) 对一个非零元素的索引进行采样,但我不确定如何继续。谢谢!
您可以试试下面的代码
> replace(0 * vec, sample(which(vec != 0), 1), 1)
[1] 0 0 0 0 0 0 0 1 0 0
哪里
which
returns 非零值索引
sample
给出一个随机索引
replace
将特定索引 处的值替换为1
如果 which
returns 只有 1 个值,请注意 sample
的行为:
> vec <- c(rep(0, 9), 1)
> sample(which(vec != 0), 1)
[1] 4
这会保留向量值(而不是将其转换为 1
)并使用 rep
来防止只有一个非零值的向量以保证 sample
得到一个具有多个非零值的向量一个元素:
vec[-sample(rep(which(vec != 0), 2), 1)] <- 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) 对一个非零元素的索引进行采样,但我不确定如何继续。谢谢!
您可以试试下面的代码
> replace(0 * vec, sample(which(vec != 0), 1), 1)
[1] 0 0 0 0 0 0 0 1 0 0
哪里
which
returns 非零值索引sample
给出一个随机索引replace
将特定索引 处的值替换为
1
如果 which
returns 只有 1 个值,请注意 sample
的行为:
> vec <- c(rep(0, 9), 1)
> sample(which(vec != 0), 1)
[1] 4
这会保留向量值(而不是将其转换为 1
)并使用 rep
来防止只有一个非零值的向量以保证 sample
得到一个具有多个非零值的向量一个元素:
vec[-sample(rep(which(vec != 0), 2), 1)] <- 0