将R中相同位置的值相乘

将R中相同位置的值相乘,r,matrix,dataset,logic,R,Matrix,Dataset,Logic,我在R工作,我有两个数据集。一个数据集包含供款金额,另一个数据集包含包含/排除标志。数据如下: > contr_df asof_dt X Y 1 2014-11-03 0.3 1.2 2 2014-11-04 -0.5 2.3 3 2014-11-05 1.2 0.4 > inex_flag asof_dt X Y 1 2014-11-03 1 0 2 2014-1

我在R工作,我有两个数据集。一个数据集包含供款金额,另一个数据集包含包含/排除标志。数据如下:

> contr_df
     asof_dt    X          Y
1 2014-11-03   0.3         1.2
2 2014-11-04  -0.5         2.3
3 2014-11-05   1.2         0.4
> inex_flag
      asof_dt  X    Y
1 2014-11-03   1   0
2 2014-11-04   1   1
3 2014-11-05   0   0
我想创建第三个数据集,显示一个乘以另一个。例如,我想看到以下内容

2014-11-03 0.3 * 1       1.2*0
2014-11-04 -0.5*1         2.3*1
2014-11-05 1.2*0         0.4*0

到目前为止,我能够实现这一点的唯一方法是使用for循环,该循环遍历总列数。然而,这是复杂和低效的。我想知道是否有更简单的方法来实现这一点。有人知道更好的解决方案吗?

这会进行乘法运算,但对系数没有意义:

df1 * df2
#  asof_dt    X   Y
#1      NA  0.3 0.0
#2      NA -0.5 2.3
#3      NA  0.0 0.0
#Warning message:
#In Ops.factor(left, right) : * nicht sinnvoll für Faktoren
一个选项:可以按如下方式查找第一列和乘以的值:

cbind(df1[1], df1[-1] * df2[-1])
#     asof_dt    X   Y
#1 2014-11-03  0.3 0.0
#2 2014-11-04 -0.5 2.3
#3 2014-11-05  0.0 0.0

这意味着,将df1和df2相乘,但不包含每个数据帧的第一列,并将df1的第一列与日期相加。

这会进行乘法,但对系数没有意义:

df1 * df2
#  asof_dt    X   Y
#1      NA  0.3 0.0
#2      NA -0.5 2.3
#3      NA  0.0 0.0
#Warning message:
#In Ops.factor(left, right) : * nicht sinnvoll für Faktoren
一个选项:可以按如下方式查找第一列和乘以的值:

cbind(df1[1], df1[-1] * df2[-1])
#     asof_dt    X   Y
#1 2014-11-03  0.3 0.0
#2 2014-11-04 -0.5 2.3
#3 2014-11-05  0.0 0.0

这意味着,将df1和df2相乘,但不包括每个数据帧的第一列,并将df1的第一列与日期相加。

单行答案是:

mapply(`*`, contr_df, inex_flag)
这将在data.frame列之间成对应用标量乘法函数

d = data.frame(a=c(1,2,3), b=c(0,2,-1))
e = data.frame(a=c(.2, 2, -1), b=c(0, 2, -2))
mapply(`*`, d, e)
      a b
[1,]  0.2 0
[2,]  4.0 4
[3,] -3.0 2

一句话的答案是:

mapply(`*`, contr_df, inex_flag)
这将在data.frame列之间成对应用标量乘法函数

d = data.frame(a=c(1,2,3), b=c(0,2,-1))
e = data.frame(a=c(.2, 2, -1), b=c(0, 2, -2))
mapply(`*`, d, e)
      a b
[1,]  0.2 0
[2,]  4.0 4
[3,] -3.0 2