使用R中的行名创建公式

时间:2019-04-30 12:55:09

标签: r loops sequence formula

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

我有两个数据框:

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 个答案:

答案 0 :(得分:3)

我们可以进行交叉生产

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