我需要提取向量的最后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.
如果我需要更准确地解释我的问题,我会详细解释。
答案 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