Умножьте значения в зависимости от значений определенных столбцов
У меня есть две базы данных, 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
использовался каждый раз.