【问题标题】:How can I calculate the mean for specific values from a vector?如何计算向量中特定值的平均值?
【发布时间】:2019-11-26 04:07:52
【问题描述】:

假设我有一个向量

x <- rnorm(100, 0, 1)

我想计算第 1、21、41、61 和 81 个值的平均值。然后是第 2 个、第 22 个、第 42 个、第 62 个和第 82 个值,依此类推。直到我得到一个包含 20 个值的最终向量。

有没有办法用基础 R 做到这一点?

提前谢谢你。

【问题讨论】:

  • 何塞,如果有任何答案解决了您的问题,请考虑accept it。还请考虑接受给您的previous questions 的答案。谢谢

标签: r vector sequence mean


【解决方案1】:

您可以使用sapply 覆盖1:20 并将其添加到0:4*20,例如:

sapply(1:20, function(i) mean(x[i + 0:4*20]))

【讨论】:

    【解决方案2】:

    将尺寸更改为 20x5 矩阵后,您可以使用 rowMeans

    set.seed(42)
    x <- rnorm(100, 0, 1)
    rowMeans(matrix(x, nrow = 20))
    # [1]  0.48315816 -0.45278238  0.32392765  0.47993455 -0.19808804
    # [6]  0.36215278  0.11231354  0.08840571  0.78022995  0.29911804
    #[11]  0.48624850  0.32825670  0.49916741  0.03855425 -0.23844465
    #[16] -0.21686072 -0.15059661 -0.88259531 -1.73071168  0.23890847
    

    另一个选项是tapplyrep_len

    out <- tapply(x, INDEX = rep_len(1:20, length(x)), mean)
    

    结果

    head(out)
    #          1          2          3          4          5          6 
    #  0.4831582 -0.4527824  0.3239276  0.4799346 -0.1980880  0.3621528
    

    【讨论】:

    • rowMeans 选项比 IMO 更好。
    • @nicola 我也这么认为。会把这个放在上面。
    • rowMeans 快 10 倍。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 2023-03-21
    相关资源
    最近更新 更多