使用R中的行名创建公式

问题描述 投票:1回答:1

我对标题感到抱歉,我不知道如何以不同的方式描述我的问题。

我有两个数据帧:

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中作为行名称的一部分列出。

任何想法如何轻松自动完成?直到现在我手动输入所有内容,但它变得太多了。

r loops sequence formula
1个回答
3
投票

我们可以做一个crossprod

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
© www.soinside.com 2019 - 2024. All rights reserved.