R:向向量的某些索引添加值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了R:向向量的某些索引添加值相关的知识,希望对你有一定的参考价值。

我有一个包含10000多个条目的向量,其中大约有4000个为零。我想为那些非零的条目添加随机值。我知道如何找出哪些指数为零,但我该如何进行添加呢?例如,考虑这个只有10个索引的向量

v <- c(0, 0.1, 0, 0, 5, 0,3, 0.8, 0, 4)
v_notzero <- which(v != 0) #extracting the non-zero entries
[1]  2  5  7  8 10
length(v_notzero)
[1] 5

现在我知道v不为零的索引以及非零的条目数。所以我想创建一个随机向量,它在与v相同的索引处填充零,并在v_notzero填充随机变量。我怎样才能做到这一点?

rand <- rnorm(5)
答案

您可以使用变量'v_notzero'重新分配值,如下所示:

v <- c(0, 0.1, 0, 0, 5, 0,3, 0.8, 0, 4)
v_notzero <- which(v != 0) #extracting the non-zero entries

### Assign random numbers ranging from 1 to 10 ###
v[v_notzero] <- runif(length(v_notzero), 1, 10)
另一答案

使用samplernormrunif可以实现另一种简洁的方法。 sample应该用于从列表中选择随机值,runif应该用于选择范围之间的值。 rnorm可用于正态分布。使用samplernorm的示例

v <- c(0, 0.1, 0, 0, 5, 0,3, 0.8, 0, 4)

v[ v != 0 ] <- sample(1:10, length(v[ v != 0 ]), replace = TRUE)

v
#[1]  0  3  0  0 10  0 10  3  0  7

v[ v != 0 ] <- rnorm(length(v[ v != 0 ]))
v
#[1]  0.0000  0.5965  0.0000  0.0000  1.6321  0.0000 -0.0732 -0.9436  0.0000 -1.2574

以上是关于R:向向量的某些索引添加值的主要内容,如果未能解决你的问题,请参考以下文章

在 if 语句的帮助下,让 R 在 while 循环中跳过某些索引值

在while循环中使用if语句使R跳过某些索引值

R语言使用sort.list函数对向量数据进行排序(默认升序排序)返回排序后的对应索引值

如何在嵌套循环中匹配来自两个字符串向量的字符串值

如何使用 R 在向量中找到第二个非连续出现的值的索引?

获取R向量中的所有最大值索引