【问题标题】:Use multiples of an index to keep or replace values in a vector使用索引的倍数来保留或替换向量中的值
【发布时间】:2019-04-25 13:50:43
【问题描述】:

“平均值”是一个 1x756 的数值向量

这是我要写的序列(数值向量):

L <- c(rep(0, 251), Mean[252],
       rep(0, 251), Mean[252*2],
       rep(0, 251), Mean[252*3])

也就是说,在 252 的倍数处,我想保留原始值。其他索引应替换为零。

有没有更聪明的方法可以写出来?

【问题讨论】:

    标签: r vector sequence


    【解决方案1】:

    R中,我们可以分成几组,然后进行拼接

    i1 <- rep(1:3, each = 252) 
    i2 <- rep(1:3, each = 251)
    unlist(Map(c, split(rep(0, 753), i2), split(Mean * i1, i1)), use.names = FALSE)
    

    数据

    set.seed(24)
    Mean <- rnorm(756) 
    

    【讨论】:

      【解决方案2】:

      在沿向量的序列上使用%%(模),将(第一个)替换索引作为除数。替换除法结果为零的值*。

      Mean[seq_along(Mean) %% 252 != 0] <- 0
      

      更小的例子,也避免了第一个索引的硬编码:

      set.seed(2)
      x <- sample(12)
      
      x[seq_along(x) %% (length(x) / 3) != 0] <- 0
      x
      # [1]  0  0  0  2  0  0  0  5  0  0  0 10
      

      *感谢@snoram 提出更直接的替代方案。

      【讨论】:

        猜你喜欢
        • 2013-11-06
        • 2021-12-17
        • 2023-04-09
        • 1970-01-01
        • 2016-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-02-06
        相关资源
        最近更新 更多