R重复一次序列,将最大值减少1

时间:2017-01-12 06:25:14

标签: r seq rep

我有一个从0(开始)到5(最后一天)编号的天数我想创建一个重复N次的列表,其中N是总天数,在这种情况下是6天(0 ,1,2,3,4,5),每次连续重复都应该将向量的长度减少1。

所以输出应该是:

0 1 2 3 4 5 0 1 2 3 4 0 1 2 3 0 1 2 0 1 0

我试过了

for(i in 5:0){
i<-seq(from=0,to=i,by=1)
print(i)
}

打印出正确的输出:

0 1 2 3 4 5
0 1 2 3 4
0 1 2 3 
0 1 2 
0 1
0

如何将每次迭代的输出写入向量?我尝试将listItems变量指定为0并使用listItems [i]&lt; - seq代码,但它只返回for循环序列中0的最后一个值。

我想我错过了一些非常简单的东西(像往常一样)

4 个答案:

答案 0 :(得分:1)

我们可以使用sequence

sequence(6:1)-1
#[1] 0 1 2 3 4 5 0 1 2 3 4 0 1 2 3 0 1 2 0 1 0

答案 1 :(得分:1)

最抽象的方法如下:

days <- 0:5
days_decrement <- lapply(rev(seq_along(days)), head, x=days)
days_decrement
# [[1]]
# [1] 0 1 2 3 4 5
# 
# [[2]]
# [1] 0 1 2 3 4
# 
# [[3]]
# [1] 0 1 2 3
# 
# [[4]]
# [1] 0 1 2
# 
# [[5]]
# [1] 0 1
# 
# [[6]]
# [1] 0

rev(seq_along(days)创建每个迭代的最后一个索引的向量,然后lapplyhead迭代它以提取所需数量的第一个元素。可以通过i访问号码days_decrement[[i]]的迭代。

这种方法很通用,可以在数据存储在行中时处理数据框和矩阵(尽管rev(seq_along(days)应该更改为rev(seq_len(nrow(days))))。

答案 2 :(得分:0)

一个向量每个条目只能有一个元素,如果你想将向量分配给一个条目,我建议使用一个列表。

一种方法看起来像这样:

retList <- list()
for (i in 5:0) {
    res <- 0:i
    retList <- append(retList, list(res))
}
retList
# [[1]]
# [1] 0 1 2 3 4 5
# 
# [[2]]
# [1] 0 1 2 3 4
# 
# [[3]]
# [1] 0 1 2 3
# 
# [[4]]
# [1] 0 1 2
# 
# [[5]]
# [1] 0 1
# 
# [[6]]
# [1] 0

# or access a part 
retList[[2]]
# [1] 0 1 2 3 4

这会给你你想要的吗?

答案 3 :(得分:0)

我认为这样可以解决问题......

unlist(lapply(5:0, seq, from = 0))

本质上,这使用lapply()c(5,4,3,2,1,0)的每个值传递给to的{​​{1}}参数,同时将seq()参数常量保持为0 。结果列在一个列表中,因此from