R:向向量

时间:2018-03-01 23:01:09

标签: r vector statistics

我有一个包含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)

2 个答案:

答案 0 :(得分:0)

您可以使用变量&#39; v_notzero&#39;重新分配值。像这样:

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)

答案 1 :(得分:0)

使用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