【问题标题】:Apply a function to every n elements of a vector [duplicate]将函数应用于向量的每 n 个元素
【发布时间】:2013-08-28 08:42:43
【问题描述】:

这其实是一个简单的问题,但我自己也想不出解决办法。

我有一个长度为 100 的向量。现在我想计算每五个元素的平均值。

例如,前五个元素的一个平均值,接下来的五个观察值的第二个平均值,依此类推。

如何在 R 中完成此操作?

【问题讨论】:

  • 但是我发现 Ananda Mahto 的建议比链接下的建议更好,因为它更直观

标签: r function vector


【解决方案1】:

使用这个:

aggregate(x, by=list(0:(length(x)-1) %/% 5), mean)

【讨论】:

    【解决方案2】:

    怎么样:

    > x <- 1:100
    > tapply(x, rep(1:(length(x)/5), each = 5), mean)
     1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 
     3  8 13 18 23 28 33 38 43 48 53 58 63 68 73 78 83 88 93 98 
    

    坚持使用rep,但试图满足@Ferdinand.kraft,有一个不太漂亮但仍然非常可读的解决方案:

    tapply(x, rep(1:ceiling(length(x)/5), each = 5, length.out = length(x)), mean)
    

    【讨论】:

    • 如果length(x) 不是 5 的倍数,则会出错。
    • @Ferdinand.kraft,你写的好像这是一个很难解决的问题,但我知道你至少知道一个解决方案;)
    • rep 有一个 length.out 参数,可以很好地与每个参数匹配
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-02
    • 2013-10-13
    • 2012-12-21
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    相关资源
    最近更新 更多