生成时间顺序

时间:2015-04-15 10:14:34

标签: r

假设我有一个向量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")

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

1 个答案:

答案 0 :(得分:2)

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"