根据某些列的值乘以值

Multiply values depending on values of certains columns

我有两个数据库,df 和 cf。我想根据 table df.

中 B 和 C 的值,将 df 中 A 的每个值乘以 cf 中的每个系数

例如 df A= 20 B= 4 和 C= 2 中的第 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

一个解决方案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

试试这个矢量化:

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

#[1]  6.0 18.0 17.5 14.4  4.3

使用 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

最终数据集同时包含 resultval,以便检查每次使用了 cf 中的哪个值。