【问题标题】:Calculating average of vectors using wildcard使用通配符计算向量的平均值
【发布时间】: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() 尝试了一些东西,但这似乎只适用于向量。

任何帮助将不胜感激,并在此先感谢您!

【问题讨论】:

  • 你的向量是包含在一个对象中(例如listdata.frame),还是只是松散地散布在你的环境中(我猜是后者)?
  • 你猜对了。它们只是松散地散布在环境中。
  • 如果它们的长度相同,请考虑一个数组对象(矩阵,数据框..)如果是数据框,您可以尝试keep &lt;- 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 个值可见)。

标签: r vector wildcard


【解决方案1】:

这里有一个解决方案:生成变量名,将它们转换为符号,用它构建一个 data.frame,然后使用rowMeans

rowMeans(data.frame(sapply(paste0("v_",1:4),as.name)))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 2014-06-26
    • 1970-01-01
    相关资源
    最近更新 更多