r - R中不同子集与不同数据的乘法

标签 r subset matrix-multiplication multiplication

我有一个很大的数据集,我将其分成了子集。对于每个子集,我必须使用不同的数字进行相同的计算。示例:

Main Table
x a b c d
A 1 2 4 5 
A 4 5 1 7
A 3 5 6 2
B 4 5 2 9
B 3 5 2 8
C 4 2 5 2
C 1 9 6 9
C 1 2 3 4
C 6 3 6 2

 Additional Table for A
  a b c d
A 5 1 6 1

Additional Table for B
  a b c d
B 1 5 2 6

Additional Table for C
  a c c d
C 8 2 4 1

我需要将主表中的所有行 A 与 A 的附加表中的值相乘,将主表中的所有行 B 与 B 中的值相乘,并将主表中的所有行 B 与 C 中的值相乘。如果这能让解决方案变得更容易,那么将附加表合并为一个组合表是完全可以的。

我考虑过 for 循环,但我无法将不同的乘法器(来自附加表)放入代码中。由于存在大量子组,因此应避免手动编码每个乘法。我该如何进行乘法运算?

最佳答案

如果我们从添加表作为 addDf 开始,主表作为 df:

addDf
  x a b c d
A A 5 1 6 1
B B 1 5 2 6
C C 8 2 4 1

我们可以使用矩阵的合并和按元素乘法,

df[-1] <- merge(addDf, data.frame(x = df[1]), by = "x")[-1] * df[order(df[1]), -1]
df
  x  a  b  c  d
1 A  5  2 24  5
2 A 20  5  6  7
3 A 15  5 36  2
4 B  4 25  4 54
5 B  3 25  4 48
6 C 32  4 20  2
7 C  8 18 24  9
8 C  8  4 12  4
9 C 48  6 24  2

注意:从@akrun借用了一些语法糖作为df[-1]赋值。

关于r - R中不同子集与不同数据的乘法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37661036/

相关文章:

R/ggplot2 - 数据框的 Y 轴值

R将函数应用于数据框的子集

java - 比较两个 ArrayLists - 一个作为另一个的子集

python - 列表与列表的列表的乘法

java - 是否有用于更好线性回归的 Java 库? (例如,迭代重新加权最小二乘法)

r - 如何在 echarts4r 图上显示标签,但每隔 2 或 3 个条显示一次?

R:如何在重叠的时间段内取平均值

r - 循环具有半类似列名的列

r - 使用 data.table 按组选择行直到最后一个非缺失值

performance - Julia 1.0 中的缓慢(重复)矩阵乘法