Умножьте значения в зависимости от значений определенных столбцов

У меня есть две базы данных, DF и ср. Я хочу умножить каждое значение A в df на каждый коэффициент в cf в зависимости от значений B и C в таблице df.

Например, строка 2 в df 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 ответа

Решение

Одно решение с 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

Окончательный набор данных имеет оба result а также val чтобы проверить, какое значение из cf использовался каждый раз.

Другие вопросы по тегам