【问题标题】:bin/group numeric vectors of different lengthbin/group 不同长度的数值向量
【发布时间】:2013-05-09 20:35:15
【问题描述】:

我有不同长度的数字向量,范围从 300 到 500。我想将它们“标准化”为 100 的长度,即对于长度为 300 的向量,我取 3 个值的平均值,对于长度 500 5 个值的平均值,以此类推。

如何在不重新排序的情况下对数字向量进行分箱并计算平均值?到目前为止,我还没有成功使用cut

# numeric vectors of different lengths
v1 = rnorm(300)
v2 = rnorm(500)

# goal: numeric vectors of same length
v1.binned = c(mean(v1[1],v1[2],v1[3]), ...)
v2.binned = c(mean(v2[1],v2[2],v2[3], v2[4], v2[5]), ...)

【问题讨论】:

  • 除非所有向量的长度都是 N*100,否则您将计算加权平均值。例如。 v3=rnorm(250) -- 如果你计算 1:100、101:200 和 201:250 的平均值,当你对这三个计算的平均值进行任何操作时,第三组的权重是其他组的两倍。

标签: r statistics bin


【解决方案1】:

您可以将向量转换为matrix 并使用colMeans

colMeans(matrix(v1,100))
[1] -0.09583398  0.01330998  0.11107002
colMeans(matrix(v2,100))
[1] -0.02396420  0.08638535 -0.03953273  0.09861287  0.01112838

如果切割尺寸不是矢量尺寸的精确倍数,请注意回收。在这种情况下,split-sapply 策略将完成这项工作:

sapply(split(v1,(seq_along(v1)-1)%/%200),mean)
        0         1 
-0.041262  0.111070 

【讨论】:

  • 向量不是切割尺寸的精确倍数。解决方案 2 有很大帮助。我想我必须将“%/%200”更改为“%/%(length(v1)/100)”之类的东西,以获得与向量长度无关的 100 个组的平均值。
猜你喜欢
  • 1970-01-01
  • 2017-07-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-07
  • 1970-01-01
  • 2019-05-22
相关资源
最近更新 更多