【发布时间】:2015-09-03 23:10:27
【问题描述】:
我有一堆向量(都具有相同的长度),并想用其他一些向量的平均值创建一个新向量。 为了简化起见,假设我只有 5 个向量(在我的数据集中还有很多)。向量的名称是计数的,所以第一个向量是 v_1,第二个是 v_2,依此类推。而我要做的就是取前4个向量的平均值(第5个不应该包含在平均值中)
v_1 v_2 v_3 v_4 v_5
1 3 2 1 6
4 2 4 4 1
2 4 5 5 2
... ... ... ... ...
我想要的是:
v_avg <- (v_1+v_2+v_3+v_4)/4
我认为必须有更好的方法来做到这一点,我不必写出所有内容而是使用某种通配符?我用 grep() 尝试了一些东西,但这似乎只适用于向量。
任何帮助将不胜感激,并在此先感谢您!
【问题讨论】:
-
你的向量是包含在一个对象中(例如
list或data.frame),还是只是松散地散布在你的环境中(我猜是后者)? -
你猜对了。它们只是松散地散布在环境中。
-
如果它们的长度相同,请考虑一个数组对象(矩阵,数据框..)如果是数据框,您可以尝试
keep <- 1:4; mean(colMeans(df[keep]))。或者使用矩阵mean(mat[,keep]) -
通过使用类似
sapply(ls()[grep("v_[0-9]+",ls())], get)的方式将它们放入矩阵中,然后您可以将 v_5 子集化并使用来自@PierreLafortune 的解决方案 -
你想要组合向量 c(v1,v2,v3,v4) 的平均值,还是“行”的平均值? (因为您在示例中除以 4,并且有 12 个值可见)。