从 R 中的变量和系数创建公式计算

Creating a formula calculation from variables and coefficients in R

我有两个数据框。一个包含主要数据和带有值的变量。第二个带有系数,它们所属的变量以及它们适用的条件。我在 Whosebug 上做了一些搜索,大部分答案都涉及将这种方法与线性模型相结合。我的问题比那个更简单(我认为),我希望得到任何反馈。

下面是我的两个数据框的一些示例数据。

理想情况下,我想要 "data" 中的一个新列,它是基于 "data" 中的变量乘以它们在 "coeff" 中关于位置的系数的计算。因此,在下面的示例中,美国只有睡眠值和账面值,而 AU 具有全部 3 个值。我想要一种方法来为 "data" 中的每一行创建一个公式,该公式贯穿所有变量和系数的计算。

我想通过每年更换系数文件和数据文件来进行更新,因此能够灵活地满足该标准是一大优势。根据位置的变量在有多少坚持什么位置方面会有很大不同。

data <- data.frame(Location = c("US", "UK", "AU","US"), Sleep = c(7, 4, 10, 11), Desk = c(0, 0, 1, 0), 
                   Book = c(11,0,19,3))
coeff<-data.frame(Location = c("US","US","UK","UK","AU","AU","AU"),
                  Variable = c("Sleep", "Book","Sleep", "Book","Sleep", "Book","Desk"),
                  Coefficient = c(.03,.11,.24,.004,.012,.10,.71))

对于第 1 行中的美国,它将是 (7*.030) + (11*.110)=1.42

可能是这个脚本有帮助(它使用数据,table 包):

library(data.table)
data <- data.table(Location = c("US", "UK", "AU","US"), Sleep = c(7, 4, 10, 11), Desk = c(0, 0, 1, 0), 
               Book = c(11,0,19,3))
coeff<-data.table(Location = c("US","US","Uk","Uk","AU","AU","AU"),
              Variable = c("Sleep", "Book","Sleep", "Book","Sleep", "Book","Desk"),
              Coefficient = c(.03,.11,.24,.004,.012,.10,.71))

data <- data[, order:=c(1:.N), by=Location]

d <- melt(data, id.vars=c('order','Location'), variable.name='Variable')

d <- merge(d,coeff, by=c('Location', 'Variable'), all=T)
d[is.na(d)] <- 0
d <- d[, result:=value*Coefficient,]
d <- d[,list(result=sum(result,na.rm=T)), by= list(order,Location)]

> head(d)
   order Location result
1:     1       AU   2.73
2:     1       UK   0.00
3:     1       US   1.42
4:     2       US   0.66
5:     0       Uk   0.00