R 带重叠的尾函数
我需要提取向量的最后3行,并将结果存储在一个列表中,列表的每个部分最多包含3个元素。然后我可以把结果排成矩阵 举下一个例子: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
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