简体   繁体   English

R合并数据集未按预期工作(多对多)

[英]R Merge datasets not working as expected (many-to-many)

I would like to merge two datasets that share some of the same variables to have one dataset with variables 'EF' and 'LF' appropriately assigned. 我想合并两个共享一些相同变量的数据集,以使一个数据集具有适当分配的变量“ EF”和“ LF”。 However, for one of the variables ('Item'), the two datasets different in degree of complexity. 但是,对于其中一个变量(“项目”),两个数据集的复杂程度不同。 I have provided both datasets below (which themselves are both subsets of larger datasets). 我在下面提供了两个数据集(它们本身都是较大数据集的子集)。

It seems that the merge is happening correctly, but the output is not what I was expecting. 似乎合并正确进行,但是输出不是我期望的。 Specifically (as an example), for 'Meat' the level names that result for 'Item.x' do not match that for 'Item.y'. 具体来说(例如),对于“肉”而言,“ Item.x”的级别名称与“ Item.y”的级别名称不匹配。 I would only keep one of the 'Item' columns after the merge is complete, but I wanted to check that the output for 'Item.y' is correct for the concept before ignoring (and deleting) 'Item.x'. 合并完成后,我只会保留“ Item”列中的一列,但是我想在忽略(并删除)“ Item.x”之前检查“ Item.y”的输出对于该概念是否正确。

From previous assistance and searching, I have tried various versions of the following code to merge df1 and df2: 在以前的帮助和搜索中,我尝试了以下代码的各种版本来合并df1和df2:

merge.df <- merge(df1, df2, by=c("Region", "Group"), all=T)

For example, changing the order of df1 and df2 in the command, or adding "Item" into the 'by' function provide output that is entirely incorrect. 例如,更改命令中df1和df2的顺序,或在“ by”函数中添加“ Item”,将提供完全不正确的输出。

What am I missing? 我想念什么?

Thanks! 谢谢!

INPUT df1 输入df1

Region  Group   Item    Stage   LF
Europe  Fruit.Veg       FSC1    20
Europe  Fruit.Veg       FSC2    5
Europe  Fruit.Veg       FSC3    2
Europe  Fruit.Veg       FSC4f   5.8935
Europe  Fruit.Veg       FSC4p   2
Europe  Fruit.Veg       FSC5f   19
Europe  Fruit.Veg       FSC5p   15
Europe  Meat    Bovine  FSC1    2.3
Europe  Meat    Mutton  FSC1    10
Europe  Meat    Goat    FSC1    10
Europe  Meat    Pig FSC1    2.5
Europe  Meat    Poultry FSC1    7
Europe  Meat    Bovine  FSC2    0.613
Europe  Meat    Mutton  FSC2    0.618
Europe  Meat    Goat    FSC2    0.618
Europe  Meat    Pig FSC2    0.23
Europe  Meat    Poultry FSC2    1.765
Europe  Meat        FSC3    5
Europe  Meat        FSC4    4.033333333
Europe  Meat        FSC5    11
Europe  Marine      FSC1    9.4
Europe  Marine      FSC2    0.5
Europe  Marine      FSC3    6
Europe  Marine      FSC4f   9
Europe  Marine      FSC4p   5
Europe  Marine      FSC5f   11
Europe  Marine      FSC5p   10
Europe  Milk.Eggs   Milk    FSC1    3.5
Europe  Milk.Eggs   Milk    FSC2    0.5
Europe  Milk.Eggs   Milk    FSC3    1.2
Europe  Milk.Eggs   Milk    FSC4    0.713333333
Europe  Milk.Eggs   Milk    FSC5    7
Europe  Milk.Eggs   Eggs    FSC1    4
Europe  Milk.Eggs   Eggs    FSC2    0
Europe  Milk.Eggs   Eggs    FSC3    0.5
Europe  Milk.Eggs   Eggs    FSC4    2
Europe  Milk.Eggs   Eggs    FSC5    8

df2 df2

Region  Sub-Region  Group   Item    EF
Europe  Europe  Fruit.Veg   Apples  0.227686081
Europe  Europe  Fruit.Veg   Bananas 0.35
Europe  Europe  Fruit.Veg   Citrus  0.344375
Europe  Europe  Fruit.Veg   Grapes  0.41
Europe  Europe  Fruit.Veg   Fruit.Other 2.029212613
Europe  Europe  Fruit.Veg   Vegetables  0.917924249
Europe  Europe  Meat    Bovine  22.68119086
Europe  Europe  Meat    Mutton  20.99167461
Europe  Europe  Meat    Goat    18.19083333
Europe  Europe  Meat    Pig 5.04123312
Europe  Europe  Meat    Poultry 3.712
Europe  Europe  Marine  Fish.Seafood    4.117510463
Europe  Europe  Milk.Eggs   Milk    1.308859756
Europe  Europe  Milk.Eggs   Eggs    3.83

OUTPUT merge.df 输出merge.df

Region  Group   Item.x  Stage   LF  Sub.Region  Item.y  EF
Europe  Fruit.Veg       FSC1    20  Europe  Apples  0.227686081
Europe  Fruit.Veg       FSC1    20  Europe  Bananas 0.35
Europe  Fruit.Veg       FSC1    20  Europe  Citrus  0.344375
Europe  Fruit.Veg       FSC1    20  Europe  Grapes  0.41
Europe  Fruit.Veg       FSC1    20  Europe  Fruit.Other 2.029212613
Europe  Fruit.Veg       FSC1    20  Europe  Vegetables  0.917924249
Europe  Fruit.Veg       FSC2    5   Europe  Apples  0.227686081
Europe  Fruit.Veg       FSC2    5   Europe  Bananas 0.35
Europe  Fruit.Veg       FSC2    5   Europe  Citrus  0.344375
Europe  Fruit.Veg       FSC2    5   Europe  Grapes  0.41
Europe  Fruit.Veg       FSC2    5   Europe  Fruit.Other 2.029212613
Europe  Fruit.Veg       FSC2    5   Europe  Vegetables  0.917924249
Europe  Fruit.Veg       FSC3    2   Europe  Apples  0.227686081
Europe  Fruit.Veg       FSC3    2   Europe  Bananas 0.35
Europe  Fruit.Veg       FSC3    2   Europe  Citrus  0.344375
Europe  Fruit.Veg       FSC3    2   Europe  Grapes  0.41
Europe  Fruit.Veg       FSC3    2   Europe  Fruit.Other 2.029212613
Europe  Fruit.Veg       FSC3    2   Europe  Vegetables  0.917924249
Europe  Fruit.Veg       FSC4f   5.8935  Europe  Apples  0.227686081
Europe  Fruit.Veg       FSC4f   5.8935  Europe  Bananas 0.35
Europe  Fruit.Veg       FSC4f   5.8935  Europe  Citrus  0.344375
Europe  Fruit.Veg       FSC4f   5.8935  Europe  Grapes  0.41
Europe  Fruit.Veg       FSC4f   5.8935  Europe  Fruit.Other 2.029212613
Europe  Fruit.Veg       FSC4f   5.8935  Europe  Vegetables  0.917924249
Europe  Fruit.Veg       FSC4p   2   Europe  Apples  0.227686081
Europe  Fruit.Veg       FSC4p   2   Europe  Bananas 0.35
Europe  Fruit.Veg       FSC4p   2   Europe  Citrus  0.344375
Europe  Fruit.Veg       FSC4p   2   Europe  Grapes  0.41
Europe  Fruit.Veg       FSC4p   2   Europe  Fruit.Other 2.029212613
Europe  Fruit.Veg       FSC4p   2   Europe  Vegetables  0.917924249
Europe  Fruit.Veg       FSC5f   19  Europe  Apples  0.227686081
Europe  Fruit.Veg       FSC5f   19  Europe  Bananas 0.35
Europe  Fruit.Veg       FSC5f   19  Europe  Citrus  0.344375
Europe  Fruit.Veg       FSC5f   19  Europe  Grapes  0.41
Europe  Fruit.Veg       FSC5f   19  Europe  Fruit.Other 2.029212613
Europe  Fruit.Veg       FSC5f   19  Europe  Vegetables  0.917924249
Europe  Fruit.Veg       FSC5p   15  Europe  Apples  0.227686081
Europe  Fruit.Veg       FSC5p   15  Europe  Bananas 0.35
Europe  Fruit.Veg       FSC5p   15  Europe  Citrus  0.344375
Europe  Fruit.Veg       FSC5p   15  Europe  Grapes  0.41
Europe  Fruit.Veg       FSC5p   15  Europe  Fruit.Other 2.029212613
Europe  Fruit.Veg       FSC5p   15  Europe  Vegetables  0.917924249
Europe  Marine      FSC1    9.4 Europe  Fish.Seafood    4.117510463
Europe  Marine      FSC2    0.5 Europe  Fish.Seafood    4.117510463
Europe  Marine      FSC3    6   Europe  Fish.Seafood    4.117510463
Europe  Marine      FSC4f   9   Europe  Fish.Seafood    4.117510463
Europe  Marine      FSC4p   5   Europe  Fish.Seafood    4.117510463
Europe  Marine      FSC5f   11  Europe  Fish.Seafood    4.117510463
Europe  Marine      FSC5p   10  Europe  Fish.Seafood    4.117510463
Europe  Meat    Bovine  FSC1    2.3 Europe  Bovine  22.68119086
Europe  Meat    Bovine  FSC1    2.3 Europe  Mutton  20.99167461
Europe  Meat    Bovine  FSC1    2.3 Europe  Goat    18.19083333
Europe  Meat    Bovine  FSC1    2.3 Europe  Pig 5.04123312
Europe  Meat    Bovine  FSC1    2.3 Europe  Poultry 3.712
Europe  Meat    Mutton  FSC1    10  Europe  Bovine  22.68119086
Europe  Meat    Mutton  FSC1    10  Europe  Mutton  20.99167461
Europe  Meat    Mutton  FSC1    10  Europe  Goat    18.19083333
Europe  Meat    Mutton  FSC1    10  Europe  Pig 5.04123312
Europe  Meat    Mutton  FSC1    10  Europe  Poultry 3.712
Europe  Meat    Goat    FSC1    10  Europe  Bovine  22.68119086
Europe  Meat    Goat    FSC1    10  Europe  Mutton  20.99167461
Europe  Meat    Goat    FSC1    10  Europe  Goat    18.19083333
Europe  Meat    Goat    FSC1    10  Europe  Pig 5.04123312
Europe  Meat    Goat    FSC1    10  Europe  Poultry 3.712
Europe  Meat    Pig FSC1    2.5 Europe  Bovine  22.68119086
Europe  Meat    Pig FSC1    2.5 Europe  Mutton  20.99167461
Europe  Meat    Pig FSC1    2.5 Europe  Goat    18.19083333
Europe  Meat    Pig FSC1    2.5 Europe  Pig 5.04123312
Europe  Meat    Pig FSC1    2.5 Europe  Poultry 3.712
Europe  Meat    Poultry FSC1    7   Europe  Bovine  22.68119086
Europe  Meat    Poultry FSC1    7   Europe  Mutton  20.99167461
Europe  Meat    Poultry FSC1    7   Europe  Goat    18.19083333
Europe  Meat    Poultry FSC1    7   Europe  Pig 5.04123312
Europe  Meat    Poultry FSC1    7   Europe  Poultry 3.712
Europe  Meat    Bovine  FSC2    0.613   Europe  Bovine  22.68119086
Europe  Meat    Bovine  FSC2    0.613   Europe  Mutton  20.99167461
Europe  Meat    Bovine  FSC2    0.613   Europe  Goat    18.19083333
Europe  Meat    Bovine  FSC2    0.613   Europe  Pig 5.04123312
Europe  Meat    Bovine  FSC2    0.613   Europe  Poultry 3.712
Europe  Meat    Mutton  FSC2    0.618   Europe  Bovine  22.68119086
Europe  Meat    Mutton  FSC2    0.618   Europe  Mutton  20.99167461
Europe  Meat    Mutton  FSC2    0.618   Europe  Goat    18.19083333
Europe  Meat    Mutton  FSC2    0.618   Europe  Pig 5.04123312
Europe  Meat    Mutton  FSC2    0.618   Europe  Poultry 3.712
Europe  Meat    Goat    FSC2    0.618   Europe  Bovine  22.68119086
Europe  Meat    Goat    FSC2    0.618   Europe  Mutton  20.99167461
Europe  Meat    Goat    FSC2    0.618   Europe  Goat    18.19083333
Europe  Meat    Goat    FSC2    0.618   Europe  Pig 5.04123312
Europe  Meat    Goat    FSC2    0.618   Europe  Poultry 3.712
Europe  Meat    Pig FSC2    0.23    Europe  Bovine  22.68119086
Europe  Meat    Pig FSC2    0.23    Europe  Mutton  20.99167461
Europe  Meat    Pig FSC2    0.23    Europe  Goat    18.19083333
Europe  Meat    Pig FSC2    0.23    Europe  Pig 5.04123312
Europe  Meat    Pig FSC2    0.23    Europe  Poultry 3.712
Europe  Meat    Poultry FSC2    1.765   Europe  Bovine  22.68119086
Europe  Meat    Poultry FSC2    1.765   Europe  Mutton  20.99167461
Europe  Meat    Poultry FSC2    1.765   Europe  Goat    18.19083333
Europe  Meat    Poultry FSC2    1.765   Europe  Pig 5.04123312
Europe  Meat    Poultry FSC2    1.765   Europe  Poultry 3.712
Europe  Meat        FSC3    5   Europe  Bovine  22.68119086
Europe  Meat        FSC3    5   Europe  Mutton  20.99167461
Europe  Meat        FSC3    5   Europe  Goat    18.19083333
Europe  Meat        FSC3    5   Europe  Pig 5.04123312
Europe  Meat        FSC3    5   Europe  Poultry 3.712
Europe  Meat        FSC4    4.033333333 Europe  Bovine  22.68119086
Europe  Meat        FSC4    4.033333333 Europe  Mutton  20.99167461
Europe  Meat        FSC4    4.033333333 Europe  Goat    18.19083333
Europe  Meat        FSC4    4.033333333 Europe  Pig 5.04123312
Europe  Meat        FSC4    4.033333333 Europe  Poultry 3.712
Europe  Meat        FSC5    11  Europe  Bovine  22.68119086
Europe  Meat        FSC5    11  Europe  Mutton  20.99167461
Europe  Meat        FSC5    11  Europe  Goat    18.19083333
Europe  Meat        FSC5    11  Europe  Pig 5.04123312
Europe  Meat        FSC5    11  Europe  Poultry 3.712
Europe  Milk.Eggs   Milk    FSC1    3.5 Europe  Milk    1.308859756
Europe  Milk.Eggs   Milk    FSC1    3.5 Europe  Eggs    3.83
Europe  Milk.Eggs   Milk    FSC2    0.5 Europe  Milk    1.308859756
Europe  Milk.Eggs   Milk    FSC2    0.5 Europe  Eggs    3.83
Europe  Milk.Eggs   Milk    FSC3    1.2 Europe  Milk    1.308859756
Europe  Milk.Eggs   Milk    FSC3    1.2 Europe  Eggs    3.83
Europe  Milk.Eggs   Milk    FSC4    0.713333333 Europe  Milk    1.308859756
Europe  Milk.Eggs   Milk    FSC4    0.713333333 Europe  Eggs    3.83
Europe  Milk.Eggs   Milk    FSC5    7   Europe  Milk    1.308859756
Europe  Milk.Eggs   Milk    FSC5    7   Europe  Eggs    3.83
Europe  Milk.Eggs   Eggs    FSC1    4   Europe  Milk    1.308859756
Europe  Milk.Eggs   Eggs    FSC1    4   Europe  Eggs    3.83
Europe  Milk.Eggs   Eggs    FSC2    0   Europe  Milk    1.308859756
Europe  Milk.Eggs   Eggs    FSC2    0   Europe  Eggs    3.83
Europe  Milk.Eggs   Eggs    FSC3    0.5 Europe  Milk    1.308859756
Europe  Milk.Eggs   Eggs    FSC3    0.5 Europe  Eggs    3.83
Europe  Milk.Eggs   Eggs    FSC4    2   Europe  Milk    1.308859756
Europe  Milk.Eggs   Eggs    FSC4    2   Europe  Eggs    3.83
Europe  Milk.Eggs   Eggs    FSC5    8   Europe  Milk    1.308859756
Europe  Milk.Eggs   Eggs    FSC5    8   Europe  Eggs    3.83

When you're merging on just region and group, you are doing a many-to-many merge. 当您仅合并区域和组时,您在进行多对多合并。 So for example, for Europe and Fruit.Veg, you have 7 records in the first df and 6 in the second, so you end up with 42 (7*6) records in your merged table - this is the correct behavior for a many-to-many merge. 例如,对于Europe和Fruit.Veg,您在第一个df中有7个记录,在第二个df中有6个记录,因此最终在合并表中有42个(7 * 6)记录-这是许多情况下的正确行为多对多合并。

It seems like what you want is to include Item in the by statement of the merge, however it may not be giving you the behavior you expect because Item is missing in some of your df1 records. 似乎您想要在合并的by语句中包含Item,但是由于某些df1记录中缺少Item,它可能无法提供预期的行为。 If that is not the case, could you explain what the incorrect behavior is when you add Item into the merge statement. 如果不是这种情况,您能否解释将Item添加到merge语句中时的错误行为。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM