尾巴功能与lapply

时间:2017-07-10 20:17:15

标签: r lapply tail

我需要提取向量的最后3行,并将结果存储在列表中,列表的每个部分包含最多3个元素。所以在那之后我可以将结果排列成矩阵。

接下来的例子:

data <- c(130,156,872,23,67,98,104)

让我说我需要最后3行数据框的每个条目

我需要结果是这样的

[1]
130
[2]
130 156
[3]
130 156 872
[4]
156 872 23
[5]
872 23 67

等等。事情是:我不能按照我认为的方式使用lapply因为没有按预期产生结果。

我确定这是一个相当简单的问题,但我无法找到解决问题的方法,而且我对此感到困惑和极度沮丧。

[1]和[2]看起来像[NA]的NA NA 130和[2]的NA 130 156.

如果我需要更准确地解释我的问题,我会详细解释。

2 个答案:

答案 0 :(得分:3)

使用lapply遍历data的索引并一次分组三个连续元素

lapply(1:length(data), function(i) data[max(1, (i-2)):i])
#[[1]]
#[1] 130

#[[2]]
#[1] 130 156

#[[3]]
#[1] 130 156 872

#[[4]]
#[1] 156 872  23

#[[5]]
#[1] 872  23  67

#[[6]]
#[1] 23 67 98

#[[7]]
#[1]  67  98 104

答案 1 :(得分:1)

您还可以使用包rollApply

中的rowr
rowr::rollApply(data, fun=c, window=3, align="right")
[[1]]
[1] 130

[[2]]
[1] 130 156

[[3]]
[1] 130 156 872

[[4]]
[1] 156 872  23

[[5]]
[1] 872  23  67

[[6]]
[1] 23 67 98

[[7]]
[1]  67  98 104