2012-06-07 2 views
3

Сейчас у меня есть два кадра данных в R, содержат некоторые данные, выглядит следующим образом:Напряжение коэффициенты из кадра данных на основе информации, в другом кадре данных

> data 
    p a   i 
1 1 1 2.2561469 
2 5 2 0.2316390 
3 2 3 0.4867456 
4 3 1 0.1511705 
5 4 2 0.8838884 

И один класс содержит коэффициенты, выглядит следующим образом : кадры

> coef 
     3  2  1 
1 29420.50 31029.75 29941.96 
2 26915.00 27881.00 27050.00 
3 27756.00 28904.00 28699.40 
4 28345.33 29802.33 28377.56 
5 28217.00 29409.00 28738.67 

Эти данные связаны, как каждого значения в данных $ а соответствует имени столбца в коэф данные и $ р соответствует строке имен в коэф.

Мне нужно применить эти коэффициенты, чтобы умножить эти коэффициенты на значения в данных $ i, сопоставив имена строк и столбцов в коэф. С данными $ a и данными $ p.

Другими словами, для каждой строки данных мне нужно использовать данные $ a и data $ p для каждой строки, чтобы вытащить определенное число из коэффа, которое будет умножено на значение данных $ i для этой строки создать новый вектор в данных, которая выглядит примерно так:

> data 
    p a   i   z 
1 1 1 2.2561469  67553 
2 5 2 0.2316390  6812 
3 2 3 0.4867456   . 
4 3 1 0.1511705   . 
5 4 2 0.8838884   . 

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

Спасибо заранее,

Ian

ответ

2

Если вы заказываете coef data.frame, вы можете просто индексировать их, как если бы имена столбцов не было.

coef <- coef[,order(names(coef))] 

apply Тогда функция для каждой строки:

myfun <- function(x) { 
    x[3]*coef[x[1], x[2]] 
} 

data$z <- apply(data, 1, myfun) 

> data 
    p a   i   z 
1 1 1 2.2561469 67553.460 
2 5 2 0.2316390 6812.271 
3 2 3 0.4867456 13100.758 
4 3 1 0.1511705 4338.503 
5 4 2 0.8838884 26341.934 
> 
Смежные вопросы