根据特定列的值乘以值

时间:2018-01-05 15:38:02

标签: r dataframe multiplying

我有两个数据库,df和cf.我希望将每个df中的每个值乘以cf中的每个系数,具体取决于表df中B和C的值。

例如   df中的第2行A = 20 B = 4且C = 2,因此正确的系数为0.3, 结果是20 * 0.3 = 6

在R!中有一种简单的方法可以做到这一点!

提前致谢!!

 df
    A  B  C
   20  4  2
   30  4  5
   35  2  2
   24  3  3
   43  2  1


   cf
      C
 B/C  1   2   3   4   5
 1   0.2 0.3 0.5 0.6 0.7
 2   0.1 0.5 0.3 0.3 0.4
 3   0.9 0.1 0.6 0.6 0.8
 4   0.7 0.3 0.7 0.4 0.6

3 个答案:

答案 0 :(得分:1)

apply的一个解决方案:

#iterate over df's rows
apply(df, 1, function(x) {

 x[1] * cf[x[2], x[3]]

})
#[1]  6.0 18.0 17.5 14.4  4.3

答案 1 :(得分:1)

试试这个矢量化:

df[,1] * cf[as.matrix(df[,2:3])]

#[1]  6.0 18.0 17.5 14.4  4.3

答案 2 :(得分:0)

使用$details = new Details(); $details->setSubtotal($price) ->setTax(2.00); $amount = new Amount(); $amount->setCurrency('USD') ->setTotal($total) ->setDetails($details); 和矢量化函数的解决方案:

dplyr

最终数据集包含df = read.table(text = " A B C 20 4 2 30 4 5 35 2 2 24 3 3 43 2 1 ", header=T, stringsAsFactors=F) cf = read.table(text = " 0.2 0.3 0.5 0.6 0.7 0.1 0.5 0.3 0.3 0.4 0.9 0.1 0.6 0.6 0.8 0.7 0.3 0.7 0.4 0.6 ") library(dplyr) # function to get the correct element of cf # vectorised version f = function(x,y) cf[x,y] f = Vectorize(f) df %>% mutate(val = f(B,C), result = val * A) # A B C val result # 1 20 4 2 0.3 6.0 # 2 30 4 5 0.6 18.0 # 3 35 2 2 0.5 17.5 # 4 24 3 3 0.6 14.4 # 5 43 2 1 0.1 4.3 result,以便检查每次使用val中的哪个值。