我在 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循环。然而,这是复杂且低效的。我想知道是否有更简单的方法来实现这一目标。有谁知道更好的解决方案?
答案 0 :(得分: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(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的第一列添加到日期。
答案 1 :(得分: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