【问题标题】:R: Adding values to certain indices of a vectorR:将值添加到向量的某些索引
【发布时间】:2018-03-01 23:01:08
【问题描述】:

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

【问题讨论】:

    标签: r vector statistics


    【解决方案1】:

    您可以像这样使用变量“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)
    

    【讨论】:

      【解决方案2】:

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

      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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-07-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-11-28
        • 1970-01-01
        • 1970-01-01
        • 2018-04-13
        相关资源
        最近更新 更多