对标题感到抱歉,我不知道如何以不同的方式描述我的问题。
我有两个数据框:
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中列为行名称的一部分。
任何想法如何轻松地自动完成?到现在为止,我都手动键入了所有内容,但是输入的内容太多了。
答案 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