R 带重叠的尾函数

R 带重叠的尾函数,r,lapply,tail,R,Lapply,Tail,我需要提取向量的最后3行,并将结果存储在一个列表中,列表的每个部分最多包含3个元素。然后我可以把结果排成矩阵 举下一个例子: data <- c(130,156,872,23,67,98,104) 等等。问题是:我不能像我想的那样使用lappy,因为它没有产生预期的结果 我相信这是一个相当简单的问题,但我找不到解决它的方法,我被困在那里,非常沮丧 [1] [2]可能看起来像[1]的NA-NA 130和[2]的NA-130-156 如果我需要更精确地回答我的问题,我会更详细地解释。使用la

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

举下一个例子:

data <- c(130,156,872,23,67,98,104)
等等。问题是:我不能像我想的那样使用
lappy
,因为它没有产生预期的结果

我相信这是一个相当简单的问题,但我找不到解决它的方法,我被困在那里,非常沮丧

[1] [2]可能看起来像[1]的NA-NA 130和[2]的NA-130-156


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

使用
lappy
沿着
数据
遍历索引,并同时将三个连续元素子集

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

使用
lappy
沿着
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

您还可以从程序包
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

您还可以从程序包
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

你提到了一个
data.frame
,但是你的
data
对象是一个数值向量。你是如何尝试使用
lappy
的?当你使用
lappy
时,你得到了什么结果。对不起,你是对的。这不是数据帧,我的输入是向量。我尝试了结果…所以你实际上没有使用
tail
。你提到了
data.frame
,但是你的
data
对象是一个数值向量。你是如何尝试使用
lappy
?当你使用
lappy
时,你得到了什么结果。对不起,你是对的。这不是数据帧,我的输入是向量。我尝试了result…所以您实际上没有使用
tail
。使用tail:
lappy(seq_沿着(数据),函数(x)tail(数据[1:x],n=3])
谢谢大家!!这两种解决方案都非常有效。这件事耽搁了3天,10分钟就解决了!再次感谢@d.b HubertLwith tail:
lappy(顺(数据),函数(x)tail(数据[1:x],n=3))
谢谢大家!!这两种解决方案都非常有效。这件事耽搁了3天,10分钟就解决了!再次感谢@d.b HubertL