【问题标题】:Adding a column to a ragged array matrix by grouping variables通过分组变量将列添加到不规则数组矩阵
【发布时间】:2013-09-04 04:35:42
【问题描述】:

在 R 中:

我不确定这个问题的正确标题是什么,所以也许有人可以帮助我。这将不胜感激。如果这被称为易于搜索的东西,我很抱歉。

所以我有一个参差不齐的数组矩阵(多个 UPCS)

     [upc]    [quantity]          [day]    [daysum]
[1]  123         11                 1         NA     
[2]  123          2                 1         NA 
[3]  789          5                 1         NA 
[4]  456         10                 2         NA 
[5]  789          6                 2         NA 

我希望UPC每天对矩阵求和,例如:

    [upc]    [quantity]          [day]    [daysum]
[1]  123         11                 1         13
[2]  123          2                 1         13
[3]  789          5                 1         5
[4]  456         10                 2         10
[5]  789          6                 2         6

感谢您的宝贵时间和帮助。

【问题讨论】:

  • 抱歉,很抱歉,您的意思是提供矩阵的代码,以便用户可以与他们一起查看他们的答案是否有效,对吗?
  • 是的。至少是一个最小的例子。例如,参见the suggestions here。但是,从外观上看,@DWin 已经用“upc”和“day”的总和填充了“long”矩阵。

标签: r matrix indexing sum apply


【解决方案1】:

您还没有描述“干净矩阵”应该发生什么,但是从适合在行对齐的基础上绑定到它的较大矩阵创建“列”的代码非常简单:

 B <- cbind(B, daysum=ave(B[, 'quantity'],   # analysis variable
                          B[, 'upc'], B[ , 'day'], # strata variables
                          FUN=sum)  )     # function applied in strata

这当然假设 B 确实具有所示的列名。如果它实际上是一个数据框,也应该可以工作,尽管输出并不表明您实际上有 R 对象。 ave 函数将为具有相同分层变量的所有行复制 sums。

【讨论】:

  • 谢谢,这是一个非常有用的功能。我现在将针对可重现的要求等进行更好的发布。
  • 是的“非常有用”。我过去曾建议ave 需要一家更好的公关公司来代表其在 R 世界中的地位。
  • 自从我问这个问题以来,我已经使用了数百次。再次感谢你,我希望 PR 起飞
  • 您知道如何做到这一点,而无需在要创建多列的地方循环,所有这些都类似于一次对一个分析变量求和? (都具有相同的分层变量。)例如,如果我有多个数量列 q1-q20,并且我想要 20 个总和列 sum1-sum20。
  • 我不确定我是否理解。发布一个带有 5 行 3 列示例的问题。
猜你喜欢
  • 2013-08-19
  • 1970-01-01
  • 1970-01-01
  • 2019-07-13
  • 1970-01-01
  • 1970-01-01
  • 2014-07-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多