如何在R中使用矩阵代数创建新列?

我有一个包含多列的数据框。我有另一个数据框,其中有两列,因子和系数。我想在初始数据帧(mydata)中创建一个新列,该列是将mydata(a:e)每行中的每个元素乘以df中的系数(a:e)的总和。 newcol第一行的结果应为64(1 * 1 + 2 * 2 + 3 * 3 + 4 * 4 + 7 * 5)。理想情况下,我将能够以不同的系数以某种方式复制这20多次。


mydata <- data.frame(a = 1:10,b = 2:11,c = 3:12,d = 4:13,d_1 = 5:14,d_2 = 6:15,d_3 = 7:16,e = 8:17)
df <- data.frame(factor = c('a','b','c','d','e'),coefficient = 1:5)

mydata$newcol <- mydata[,c("a","b","c","d","e")] %*% df$coefficient
mydata$newcol2 <- mydata[,"d_1","e")] %*% df$coefficient

任何建议都会有所帮助!

yellowmin 回答:如何在R中使用矩阵代数创建新列?

我们可以在此处使用sweep,基于mydatafactor列的子集df,然后将其与每个元素的coefficient相乘,然后取{{ 1}}来计算总和。

rowSums

或者我们也可以转置mydata$newcol <- rowSums(sweep(mydata[as.character(df$factor)],2,df$coefficient,`*`)) mydata # a b c d d_1 d_2 d_3 e newcol #1 1 2 3 4 5 6 7 8 70 #2 2 3 4 5 6 7 8 9 85 #3 3 4 5 6 7 8 9 10 100 #4 4 5 6 7 8 9 10 11 115 #5 5 6 7 8 9 10 11 12 130 #6 6 7 8 9 10 11 12 13 145 #7 7 8 9 10 11 12 13 14 160 #8 8 9 10 11 12 13 14 15 175 #9 9 10 11 12 13 14 15 16 190 #10 10 11 12 13 14 15 16 17 205 并乘以mydata并得到coefficient

colSums
本文链接:https://www.f2er.com/3155522.html

大家都在问