【问题标题】:Generate chronological sequence生成时间顺序
【发布时间】:2015-04-15 22:26:46
【问题描述】:

假设我有一个向量c("m1","m2","m3","m4")

我需要生成各种可能的时间顺序。 上面的输出应该是这样的

c("m1","m1 m2","m1 m2 m3","m1 m2 m3 m4","m2","m2 m3","m2 m3 m4","m3","m3 m4","m4")

我希望代码避免任何循环,因为我需要为大量数据运行它。

【问题讨论】:

  • this 有用吗?
  • 是的。谢谢大卫 :)

标签: r


【解决方案1】:

combn 与指定的函数一起使用,包括单例和排序:

Paste <- function(x) paste(m[x[1]:x[2]], collapse = " ")
sort(c(m, combn(length(m), 2, FUN = Paste)))

给予:

[1] "m1"          "m1 m2"       "m1 m2 m3"    "m1 m2 m3 m4" "m2"         
[6] "m2 m3"       "m2 m3 m4"    "m3"          "m3 m4"       "m4"   

如果顺序无关紧要,请忽略sort

注意:如果我们更喜欢字符向量列表(而不是粘贴字符串的向量),那么这个稍微简单的代码将提供未排序的代码:

enlist <- function(x) list(m[x[1]:x[2]])
L <- c(m, combn(length(m), 2, FUN = enlist))

给予:

> str(L)
List of 10
 $ : chr "m1"
 $ : chr "m2"
 $ : chr "m3"
 $ : chr "m4"
 $ : chr [1:2] "m1" "m2"
 $ : chr [1:3] "m1" "m2" "m3"
 $ : chr [1:4] "m1" "m2" "m3" "m4"
 $ : chr [1:2] "m2" "m3"
 $ : chr [1:3] "m2" "m3" "m4"
 $ : chr [1:2] "m3" "m4"

【讨论】:

  • 这是避免循环的非常聪明的方法。非常好的答案。
猜你喜欢
  • 2023-04-07
  • 2017-06-13
  • 2011-01-05
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
  • 2019-10-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多