簡體   English   中英

在R中,當兩個數據幀中的某些值相等時,如何將數據幀中的某些特定列添加到另一個數據幀?

[英]In R, how can I add some specific columns from a dataframe to another dataframe when some values are equal in both dataframes?

我有兩個數據集,它們具有相同的行組合Country和Year,我想以一種行組合匹配的方式將一個數據集中的一些列添加到另一個數據集中。

數據集1:

+----------+------+---------+---------+-----+
| Country  | Year | exports | imports | ... |
+----------+------+---------+---------+-----+
| Germany  | 2000 | 0.70    | 0.40    | ... |
| Germany  | 2001 | 0.68    | 0.41    | ... |
| Germany  | 2002 | 0.71    | 0.48    | ... |
| Germany  | 2003 | ...     | ...     | ... |
| Spain    | 2000 | 0.51    | 0.56    | ... |
| Spain    | 2001 | 0.48    | 0.50    | ... |
| Spain    | 2002 | 0.50    | 0.53    | ... |
| Spain    | 2003 | ...     | ...     | ... |
| ...      | ...  | ...     | ...     | ... |
+----------+------+---------+---------+-----+

數據集2:

+----------+-----+------+--------------+-------+-----+
| Country  | CC  | Year | unemployment | Pop   | ... |
+----------+-----+------+--------------+-------+-----+
| Germany  | GER | 2000 | 0.03         | 79.50 | ... |
| Germany  | GER | 2001 | 0.05         | 79.53 | ... |
| Germany  | GER | 2002 | 0.04         | 79.80 | ... |
| Germany  | GER | 2003 | ...          | ...   | ... |
| Hungary  | HUN | 2000 | ...          | ...   | ... |
| Hungary  | HUN | 2001 | ...          | ...   | ... |
| Hungary  | HUN | 2002 | ...          | ...   | ... |
| Hungary  | HUN | 2003 | ...          | ...   | ... |
| Spain    | ESP | 2000 | 0.08         | 40.2  | ... |
| Spain    | ESP | 2001 | 0.11         | 40.5  | ... |
| Spain    | ESP | 2002 | 0.10         | 40.55 | ... |
| Spain    | ESP | 2003 | ...          | ...   | ... |
| ...      | ... | ...  | ...          | ...   | ... |
+----------+-----+------+--------------+-------+-----+

我希望合並的數據看起來像這樣:


+----------+-----+------+---------+---------+--------------+-------+-----+
| Country  | CC  | Year | exports | imports | unemployment | Pop   | ... |
+----------+-----+------+---------+---------+--------------+-------+-----+
| Germany  | GER | 2000 | 0.70    | 0.40    | 0.03         | 79.50 | ... |
| Germany  | GER | 2001 | 0.68    | 0.41    | 0.05         | 79.53 | ... |
| Germany  | GER | 2002 | 0.71    | 0.48    | 0.04         | 79.80 | ... |
| Germany  | GER | 2003 | ...     | ...     | ...          | ...   | ... |
| Spain    | ESP | 2000 | 0.51    | 0.56    | 0.08         | 40.2  | ... |
| Spain    | ESP | 2001 | 0.48    | 0.50    | 0.11         | 40.5  | ... |
| Spain    | ESP | 2002 | 0.50    | 0.53    | 0.10         | 40.55 | ... |
| Spain    | ESP | 2003 | ...     | ...     | ...          | ...   | ... |
| ...      | ... | ...  | ...     | ...     | ...          | ...   | ... |
+----------+-----+------+---------+---------+--------------+-------+-----+

因此,不在數據集1中的國家(在本例中為匈牙利)不在合並數據集中,國家/地區代碼也在新數據集中。 有人能告訴我如何實現這一目標嗎? 我有28年,每個約100個國家。 因此,使用我必須指定每個組合的功能將不方便...

我試圖將它與merge()合並,但沒有成功,因為它只創建了數百個具有相同國家和年份組合的行。

合並絕對應該為此工作。 您應該指定要合並兩列。

merge( df1 , df2 , by=c( "Country", "Year") )

同時確認合並變量的類是相同的

sapply( df1[, c( "Country", "Year")] , class )
sapply( df2[, c( "Country", "Year")] , class )

確認兩個數據框中的變量拼寫方式相同

intersect( names( df1 ) , names( df2 ))

最后確認年份和國家在兩個data.frames中都是唯一的

sum( duplicated( df1[ ,c( "Country", "Year") ] ))
sum( duplicated( df2[ ,c( "Country", "Year") ] ))

您可以使用dplyr包中的inner_join()執行此dplyr

dplyr::inner_join(df1, df2, by=c("Country", "Year"))

merge()的答案有效! 現在我面臨的問題是,例如西班牙2000年沒有任何失業數據。但是,我仍然希望增加西班牙的所有年份,並希望在2000年的合並數據集中為西班牙的失業欄增加一個NA 。 我怎樣才能做到這一點?

我嘗試使用merge(df1, df2, all.x = TRUE)但有時它只是因某種原因創建了NA ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM