【问题标题】:Extract every nth element of a vector提取向量的每个第 n 个元素
【发布时间】:2011-07-11 09:19:09
【问题描述】:

我想创建一个向量,其中每个元素都是另一个向量的i+6th 元素。

例如,在一个长度为 120 的向量中,我想创建另一个长度为 20 的向量,其中每个元素都是初始向量的值 i, i+6, i+12, i+18...,即我想提取原始向量的每 6 个元素。

【问题讨论】:

    标签: r vector


    【解决方案1】:
    a <- 1:120
    b <- a[seq(1, length(a), 6)]
    

    【讨论】:

    • 最好使用 seq.int(1L, length(a), 6L),至少对于长向量而言
    • @WojciechSobala 你能评论一下为什么它更好吗?
    • @DavidPell seq.int 在微基准测试中更快,但我怀疑实际程序中的任何性能提升都会与其他部分的运行时间相形见绌。
    • 我讨厌将 Python 与 R 进行比较,但是 PyRon 能有多棒呢? a = 1:120; b = [::6]。 Python 做不到前者,R 做不到后者。
    【解决方案2】:

    获取序列片段的另一个技巧(除了已经提到的 seq 解决方案)是使用短逻辑向量并使用向量循环:

    foo[ c( rep(FALSE, 5), TRUE ) ]
    

    【讨论】:

    • 这种方法的一个优点是可以临时使用;为了使用seq,您必须能够在向量上调用lengthletters[letters &lt; 'm'][c(TRUE, FALSE, FALSE)]
    【解决方案3】:

    我认为你在问两个不一定相同的事情

    我想提取每 6 个元素 原来的

    你可以通过索引一个序列来做到这一点:

    foo <- 1:120
    foo[1:20*6]
    

    我想在 其中每个元素是第 i+6 个 另一个向量的元素。

    一个简单的方法是用 FALSE 补充一个逻辑因子,直到 i+6

    foo <- 1:120
    i <- 1
    foo[1:(i+6)==(i+6)]
    [1]   7  14  21  28  35  42  49  56  63  70  77  84  91  98 105 112 119
    
    i <- 10
    foo[1:(i+6)==(i+6)]
    [1]  16  32  48  64  80  96 112
    

    【讨论】:

    • 真漂亮!我也将它用于另一个方向,foo[1:(i+6)!=(i+6)],即输出除第六个以外的所有值。
    【解决方案4】:

    从向量中的任意起始位置选择每个第n个元素

    nth_element <- function(vector, starting_position, n) { 
      vector[seq(starting_position, length(vector), n)] 
      }
    
    # E.g.
    vec <- 1:12
    
    nth_element(vec, 1, 3)
    # [1]  1  4  7 10
    
    nth_element(vec, 2, 3)
    # [1]  2  5  8 11
    

    【讨论】:

      【解决方案5】:

      要选择偏移量/偏移量为 f=0,...,n-1 的每个第 n 个元素,请使用

      vec[mod(1:length(vec), n)==f]
      

      当然,您可以将其包装在一个不错的函数中:

      nth_element <- function(vec, interval, offset=0){
          vec[mod(1:length(vec), interval)==mod(offset, interval)]
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-11-08
        • 1970-01-01
        • 2022-07-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-06
        相关资源
        最近更新 更多