【问题标题】:tail function with lapply带 lapply 的尾部函数
【发布时间】:2017-07-10 20:17:14
【问题描述】:

我需要提取向量的最后 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] 可能类似于 [1] 的 NA NA 130 和 [2] 的 NA 130 156。

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

【问题讨论】:

  • 您提到了data.frame,但您的data 对象是一个数字向量。
  • 你是如何尝试使用lapply的?
  • 你在使用lapply时得到了什么结果。
  • 对不起,你是对的。那不是数据框,我的输入是向量。我尝试了 result
  • ...所以你没有实际使用tail

标签: r lapply tail


【解决方案1】:

使用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

【讨论】:

  • 带尾:lapply(seq_along(data), function(x) tail(data[1:x] , n = 3))
  • 谢谢你们!!两种解决方案都可以完美运行。 3天坚持这个,10分钟在这里解决了!再次感谢@d.b HubertL
【解决方案2】:

您也可以使用包rowr中的rollApply

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

【讨论】:

    猜你喜欢
    • 2020-07-01
    • 1970-01-01
    • 2019-09-10
    • 2019-11-27
    • 2011-12-22
    • 2021-10-01
    • 2018-11-03
    • 2018-01-22
    相关资源
    最近更新 更多