Создать формулу, используя имена строк в R - PullRequest
1 голос
/ 30 апреля 2019

Прошу прощения за название, я не знаю, как по-другому описать мою проблему.

У меня есть два кадра данных:

set.seed(5)

Estimate_list = rnorm(7) 
Tvalue_list = rnorm(7) 

df1 = data.frame(Estimate = Estimate_list, Tvalue = Tvalue_list)
rownames(df1) <- c("Intercept", "ABC$V2", "ABC$V6", "ABC$V9", "ABC$V22", "ABC$V25", "ABC$V31")


set.seed(7)

df2 = data.frame(V1 = rnorm(3), V2 = rnorm(3),  V6 = rnorm(3), V8 = rnorm(3), V9 = rnorm(3),  V10 = rnorm(3),
             V14 = rnorm(3), V22 = rnorm(3), V25 = rnorm(3), V27 = rnorm(3), V31 = rnorm(3), V36 = rnorm(3))

Я хочу найти автоматический способчтобы сделать это:

Val_df1 = df1[1,1] + 
df1[2,1]*df2$V2  + df1[3,1]*df2$V6 + 
df1[4,1]*df2$V9  + df1[5,1]*df2$V22 +
df1[6,1]*df2$V25 + df1[7,1]*df2$V31 

В основном я хочу использовать первую запись в df1, а затем перейти вниз по первому столбцу в df1 и умножить значения на столбцы в df2.Но я хочу использовать только столбцы df2, имена которых указаны как часть имен строк в df1.

Есть идеи, как легко сделать это автоматически?До сих пор я набирал все вручную, но это слишком много.

1 Ответ

3 голосов
/ 30 апреля 2019

Мы можем сделать кросспрод

Val_df1New <- ((as.matrix(df2[, c("V2", "V6", "V9", "V22", "V25", "V31")]) %*%
        df1[-1, 1]) + df1[1, 1])[,1]

all.equal(Val_df1, Val_df1New)
#[1] TRUE
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...