2014-11-06 34 views
0

我在R中工作,我有两个数据集。一个数据集包含一个贡献量,另一个包含一个包含/排除标志。以下是数据:在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循环,通过列的总数循环。但是,这是复杂和低效的。我想知道是否有更简单的方法来实现这一点。有谁知道更好的解决方案?

回答

3

这确实乘法,但不会使感觉因素:

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第一列和乘积值是这样的:

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的第一列与日期相加。

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