当前位置: 首页 > 知识库问答 >
问题:

r如何将一个数据框中的选择变量应用到另一个数据框中的行公式中

家经纶
2023-03-14

我有两个不同维度的数据框架,一个包含观察值,另一个包含与观察值相关的常数,用于算术运算。我想做的是从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的全尺寸是几十万行乘16列;df2约为150行乘20列。

共有1个答案

呼延宪
2023-03-14

这可以通过dplyr的<code>inner_join

library(dplyr)
df1 %>% inner_join(df2, by = c(Region = "Area", "Item")) %>%
    mutate(L1 = (Production + Imports + Stock.Var - Exports) * LF1)

如果你宁愿坚持使用以R为基数,你可以使用合并

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
 类似资料:
  • 我有一个数据帧(df1),其中包含200多列数据(每列数千行)。列名是字母数字的,并且彼此不同。 我有第二个数据集(df2),其中包含几列,其中第一列(名为“col1”)包含带有“值”的行,这些行带有df1的列名。 但不是对于df2中的每一行,我在df1中具有对应的列。 现在,我想删除(删除)df2中没有“对应”列的所有行。 我用“子集data.frame另一个data.frame的值”这样的关键

  • 我有一个包含两列的数据框架(DF1) 和另一个像这样的数据帧(DF2) 我必须将DF2中的各个字符串值替换为它们在DF1中的相应值…例如,在操作之后,我应该取回这个数据框。 我尝试了多种方法,但似乎无法找到解决方案。

  • 问题内容: 我有2个数据框,一个命名为USERS,另一个命名为EXCLUDE。他们两个都有一个名为“电子邮件”的字段。 基本上,我要删除EXERSUDE中包含电子邮件的USERS中的每一行。 我该怎么做? 问题答案: 您可以将和条件一起使用,通过以下方式反转布尔值: 另一个解决方案:

  • 问题内容: 我有2个数据框。 我想遍历每行,并检查每个名称是否在中。 如果名称在其中,结果应返回1,否则返回0: 谢谢。 问题答案: 采用 在数据框中显示结果 在系列对象中

  • 问题内容: 我有两个数据框,第一个有1000行,看起来像: 该列具有不同的值,有时会重复,但通常大约有50个唯一值。 第二个数据框包含所有这50个唯一值(50行)以及与这些值关联的酒店: 我的目标是用第二个数据帧的列的相应值替换第一个数据帧的列中的值,或者用相应的值创建该列。当我尝试通过像 我有一个错误,即数据帧的大小不相等,因此无法进行比较 问题答案: 如果将索引设置为另一个df上的“组”列,则

  • 问题内容: 我有一个具有多个列和行的数据框 df1 。简单的例子: 我想创建一个空的数据框 df2, 然后再添加带有计算结果的新列。 目前,我的代码如下所示: …添加两个新列: 有没有更好/更安全/更快的方法呢?是否可以创建一个空的数据帧df2并仅从df1复制索引? 问题答案: 这将创建一个没有列但只有一个索引的DataFrame,并且它将与df1中的索引相同。