R 根据特定列的值乘以值

R 根据特定列的值乘以值,r,dataframe,multiplication,R,Dataframe,Multiplication,我有两个数据库,df和cf。我想根据表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

我有两个数据库,df和cf。我想根据表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

一个应用了
的解决方案

#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

最后的数据集既有
结果
又有
val
,以检查每次使用的是
cf
中的哪个值。

谢谢您的回答。我有一个问题,为什么要将数据转换为表?我们将其作为数据帧,不能将其转换为表。
df
cf
都是数据帧。读取它们的命令是
read.table
,但它们不是表。这取决于字符的含义。您无法将两个字符串相乘,但上述概念适用于任何情况。