【问题标题】:How to repeat the indices of a vector based on the values of that same vector?如何根据同一向量的值重复向量的索引?
【发布时间】:2020-08-19 00:25:00
【问题描述】:

给定一个随机整数向量如下:

z <- c(3, 2, 4, 2, 1)

我想创建一个包含所有 z 索引的新向量,该向量的次数由对应于 z 元素的值指定。为了说明这一点。在这种情况下,期望的结果应该是:

[1] 1 1 1 2 2 3 3 3 3 4 4 5

必须有一个简单的方法来做到这一点。

【问题讨论】:

    标签: r vector indices


    【解决方案1】:

    您可以使用repseq根据同一向量的值重复该向量的索引seq 获取索引rep 重复它们。

    rep(seq(z), z)
    # [1] 1 1 1 2 2 3 3 3 3 4 4 5
    

    【讨论】:

    • 这是一个闪电般快速的答案,也是一种更短、更优雅的解决方案。谢谢 GKi!
    【解决方案2】:

    从向量 z 的所有索引开始。这些是由:

    1:length(z)
    

    那么这些元素应该被重复。这些数字应重复的次数由 z 的值指定。这可以使用lapplysapply 函数和rep 函数的组合来完成:

    unlist(lapply(X = 1:length(z), FUN = function(x) rep(x = x, times = z[x])))
    [1] 1 1 1 2 2 3 3 3 3 4 4 5
    
    unlist(sapply(X = 1:length(z), FUN = function(x) rep(x = x, times = z[x])))
    [1] 1 1 1 2 2 3 3 3 3 4 4 5
    

    两种选择都给出相同的结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-28
      • 1970-01-01
      • 1970-01-01
      • 2018-06-21
      • 1970-01-01
      • 2022-01-10
      相关资源
      最近更新 更多