如何将变量从一个数据框添加到另一数据框(几种情况)

时间:2018-11-05 18:20:48

标签: r dataframe merge conditional-statements

我已经阅读了现有的主题,但是我没有读过与我想做的事情相符的事情。

数据框1:newdata(摘录)

country year      sector    emissions
Austria 1990       Total    6.229223e+04
Austria 1990   Regulated    3.826440e+04
Austria 1990 Unregulated    2.402783e+04
Austria 1991       Total    6.589968e+04
Austria 1991   Regulated    3.931820e+04
Austria 1991 Unregulated    2.658148e+04

数据框2:EUETS(摘录)

country         year  emissions
Austria         2005  164925659
Belgium         2005  282762153
Croatia         2005          0
Cyprus          2005   16021583
Czech Republic  2005  288986144
Denmark         2005  171815416
Estonia         2005   71336242

我想做什么:

  • 将信息从EUETS$emissions添加到新列newdata$EUETS
  • 此插入应基于国家和年份,并插入到该国家和年份的行中,其中newdata$sector = "regulated"
  • newdata$sector = "unregulated"newdata$sector = "Total"需要接收NA,在任何情况下都0
  • 如果EUETS$country和/或EUETS$year中没有相应的信息,则应将NA插入newdata$EUETS
  • 如果在EUETS$emissions中有信息,但在newdata中没有与此匹配的年份和/或国家,则将为此信息创建一个新行,并填充EUETS中的值如上所述,但是在NAnewdata$emissions = Total的新单元格中插入newdata$unregulated

这应该看起来像这样:

country         year      sector    emissions     EUETS
Austria         1990       Total    6.229223e+04  NA
Austria         1990   Regulated    3.826440e+04  2516843
Austria         1990 Unregulated    2.402783e+04  NA
Austria         1991       Total    6.589968e+04  NA
Austria         1991   Regulated    3.931820e+04  446656
Austria         1991 Unregulated    2.658148e+04  NA
Liechtenstein   2005 Total          NA            NA
Liechtenstein   2005 Regulated      NA            654612641
Liechtenstein   2005 Unregulated    NA            NA

列支敦士登只是在EUETS$country中,而在newdata$country中却不存在,因此被添加到后者的数据框中。

这可能是几个问题/合一,但我希望这里合适。我尝试了一些事情,但在将值填充到newdata的现有列(国家和年份)中时,尤其麻烦。

我非常感谢您完成此任务的任何部分。

非常感谢!

Nordsee

1 个答案:

答案 0 :(得分:2)

首先,更改EUETS列的名称和扇区,使其最终显示出来:

names(EUETS)[3] = "EUETS"
EUETS$sector = "Regulated"

确保您原来的扇区列是一个字符,而不是一个因素:

newdata$sector = as.character(newdata$sector)

合并数据

result = merge(newdata, EUETS, all = TRUE)

要将未代表国家/地区重新添加到EUETS中,我不确定您要添加什么yearemissions值,因此我暂时将其忽略。但基本上您想再次使用merge