【问题标题】:Circular shift of vector by distance n [duplicate]向量的圆位移 n [重复]
【发布时间】:2015-05-30 04:06:49
【问题描述】:

说我有

a <- c(1, 2, 3)

我希望通过将 b 向“左”方向移动距离 1 从 a 导出 b

b
# [1] 2 3 1

我的意思是你:

  1. 将“a”传递给输出“b”的函数
  2. 您使用某种索引短片可以做到这一点。
  3. 例如,b &lt;- c(2, 3, 1) 不是我正在寻找的解决方案

什么是优雅/高效的方法?

【问题讨论】:

  • 这些信息不足以查看您要使用的模式。在这种情况下 b &lt;- a[c(2,3,1)] 但也许你正在寻找其他东西。
  • @plafort 嘿,感谢您的评论 - 我试图为问题添加更多细节 - 有帮助吗
  • 确实如此,我会发布答案
  • 接受阿南达的回答,我的回答过于具体b &lt;- a[c(2:length(a),1)]

标签: r vector


【解决方案1】:

您可以使用headtail 来创建这样的函数:

shifter <- function(x, n = 1) {
  if (n == 0) x else c(tail(x, -n), head(x, n))
}

用法:

a <- 1:4

shifter(a)
# [1] 2 3 4 1

shifter(a, 2)
# [1] 3 4 1 2

(或者,library(SOfun); shifter(a),您可以从here 获得SOfun)。

【讨论】:

    猜你喜欢
    • 2012-05-06
    • 1970-01-01
    • 2017-01-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-05
    • 2015-10-03
    • 2012-02-19
    相关资源
    最近更新 更多