R如何将一个数据帧中的select变量应用于另一个数据帧上的行方程中

R如何将一个数据帧中的select变量应用于另一个数据帧上的行方程中,r,R,我有两个不同维度的数据框,一个包含观测值,另一个包含与观测值相关的常数,用于算术。我想做的是从df2中选择适当的常数,与df1中的行观测一起使用,以生成df3 我附上了样本数据和一个简单的方程式: # df1 with annual observation data from different commodities df1 <- data.frame(Region = c("Europe", "Asia", "N.Amer", "Africa"),

我有两个不同维度的数据框,一个包含观测值,另一个包含与观测值相关的常数,用于算术。我想做的是从df2中选择适当的常数,与df1中的行观测一起使用,以生成df3

我附上了样本数据和一个简单的方程式:

# df1 with annual observation data from different commodities

df1 <- data.frame(Region = c("Europe", "Asia", "N.Amer", "Africa"), 
                  Item = c("Wheat", "Barley", "Oats", "Rice"), 
                  Year = c(1961, 1961, 1961, 1961), 
                  Production = c(2000, 1000, 1500, 500), 
                  Imports = c(1000, 200, 3000, 100), 
                  Stock.Var = c(-100, 300, 50, 0), 
                  Exports = c(250, 150, 100, 200))

#df2 with constants for losses by commodity in different regions

df2 <- data.frame(Area = c("Asia", "N.Amer", "Europe", "Africa"),
                  Item = c("Wheat", "Oats", "Rice", "Barley"), 
                  LF1 = c(0.02, 0.1, 0.15, 0.05))

# df3 would contain the outputs from calculating losses from df1 by df2 by  row
# Equation: L1 = (Production + Imports + Stock.Var - Exports) * LF1
方程式中LF1的值取自df2,基于df1中的项目和区域名称

df1的完整大小是数十万行16列;df2大约是150行20列。

这可以通过的内部连接和变异来完成:

如果您更愿意使用base R,可以使用merge:


在df2中的区域+项目组合中,只有一个N.Amer+Oats与df1中的区域+项目组合匹配。这是故意的,还是因为示例只显示了每个数据帧的一部分?只需将data.frames合并在一起,就可以得到每行的正确系数。非常感谢,David。一行代码。。。很明显,我有很多东西要学,我原以为需要某种循环功能!
library(dplyr)
df1 %>% inner_join(df2, by = c(Region = "Area", "Item")) %>%
    mutate(L1 = (Production + Imports + Stock.Var - Exports) * LF1)
m <- merge(df1, df2, by.x = c("Region", "Item"), by.y = c("Area", "Item"))
m$L1 <- (m$Production + m$Imports + m$Stock.Var - m$Exports) * m$LF1