【问题标题】:Create a vector using rep() and seq()使用 rep() 和 seq() 创建向量
【发布时间】:2018-02-20 20:31:38
【问题描述】:

如何创建向量序列:

2 3 4 5 6 7 8 3 4 5 6 7 8 4 5 6 7 8 5 6 7 8 6 7 8 7 8

我尝试使用:

2:8+rep(0:6,each=6)

但结果是:

2 3 4 5 6 7 8 3 4 5 6 7 8 9 4 5 6 7 8 9 10 .... 12 13 14

请帮忙。谢谢。

【问题讨论】:

  • unlist(Map(":", 2:7,8))
  • sapply(2:7, function(i)seq(i, 8))
  • 同样,sapply(7:2, function(x) seq(to = 8,length.out = x))
  • @Sotos,这与sapply(2:7, seq, 8) 相同,但您仍然需要unlist
  • head(sequence(7:1) + rep(1:7, 7:1), -1)

标签: r seq rep


【解决方案1】:

你可以这样做:

library(purr)
unlist(map(2:7, ~.x:8))

# [1] 2 3 4 5 6 7 8 3 4 5 6 7 8 4 5 6 7 8 5 6 7 8 6 7 8 7 8

以及基础 R 中的一个小功能:

funky_vec <- function(from,to){unlist(sapply(from:(to-1),`:`,to))}
funky_vec(2,8)
# [1] 2 3 4 5 6 7 8 3 4 5 6 7 8 4 5 6 7 8 5 6 7 8 6 7 8 7 8

【讨论】:

  • unlist(lapply(2:7,function(x){x:8})) 也可以在没有额外包的情况下工作
  • 是的,我想把漂亮的答案放在第一位,看更新的答案
【解决方案2】:

这应该完成您正在寻找的内容:

x = 2
VecSeq = c(x:8)

while (x < 7) {
    x = x + 1
    calc = c(x:8)
    VecSeq = c(VecSeq, calc)
}

VecSeq # Your desired vector

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-12
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-20
    • 1970-01-01
    相关资源
    最近更新 更多