当因子R具有不同级别时合并

时间:2014-05-05 14:59:34

标签: r merge

我想仔细检查一下。我正在尝试将大型数据集合并到一个较小的数据集中。我的大型数据框具有未包含在小型数据集中的观察结果。我无法使用标准代码

获得与我的数据帧的简单合并
x<-merge(df1,df2) ###default is all=FALSE. 
                  ###output from this code produces a df with 49 rows instead of 13

也用过;

x<-merge(df1,df2, by='noms')  ##output produces 49 rows instead of 13

经过多次阅读并检查已经提出问题的人提出这个问题,例如,Merge 2 data frames, discard unmatched rows我遇到了https://stat.ethz.ch/pipermail/r-help/2006-September/113148.html,其中说明没有明确的方法可以解决这个问题。

这仍然是这样吗?道歉,如果已经在某处已经回答了,我已经尝试阅读核心文档了?在stackoverflow上合并和发布 - 但现在我处于松散状态。

我的dfs在

之下

小数据框

 noms fruits apple orange kiwi all_comb comb numbers
1  mary  apple     1      0    0        1    1       1
2  mary  grape     0      0    0        0    1       2
3  mary orange     0      1    0        0    1       3
4  mary  apple     1      0    0        1    1       4
5  john banana     0      0    0        0    1       1
6  john  apple     1      0    0        1    1       2
7  john  apple     1      0    0        1    1       3
8  john  apple     1      0    0        1    1       4
9  lucy   kiwi     0      0    1        0    1       1
10 lucy orange     0      1    0        0    1       2
11 lucy  apple     1      0    0        1    1       3
12 lucy  berry     0      0    0        0    1       4
13  tom orange     0      1    0        0    1       1

大型数据框

  noms age
1  jane  50
2  jane  50
3  jane  50
4  jane  50
5  mary  65
6  mary  65
7  mary  65
8  mary  65
9  john  34
10 john  34
11 john  34
12 john  34
13  pat  65
14  pat  65
15  pat  65
16 lucy  89
17 lucy  89
18 lucy  89
19 lucy  89
20  tom  12

所需的输出

DF

  noms fruits apple orange kiwi all_comb comb numbers age
1  mary  apple     1      0    0        1    1       1  65
2  mary  grape     0      0    0        0    1       2  65
3  mary orange     0      1    0        0    1       3  65
4  mary  apple     1      0    0        1    1       4  65
5  john banana     0      0    0        0    1       1  34
6  john  apple     1      0    0        1    1       2  34
7  john  apple     1      0    0        1    1       3  34
8  john  apple     1      0    0        1    1       4  34
9  lucy   kiwi     0      0    1        0    1       1  89
10 lucy orange     0      1    0        0    1       2  89
11 lucy  apple     1      0    0        1    1       3  89
12 lucy  berry     0      0    0        0    1       4  89
13  tom orange     0      1    0        0    1       1  12

2 个答案:

答案 0 :(得分:3)

如果您使用df2的唯一行:

,它会起作用
merge(df1, unique(df2))

   noms fruits apple orange kiwi all_comb comb numbers age
1  john banana     0      0    0        0    1       1  34
2  john  apple     1      0    0        1    1       2  34
3  john  apple     1      0    0        1    1       3  34
4  john  apple     1      0    0        1    1       4  34
5  lucy   kiwi     0      0    1        0    1       1  89
6  lucy orange     0      1    0        0    1       2  89
7  lucy  apple     1      0    0        1    1       3  89
8  lucy  berry     0      0    0        0    1       4  89
9  mary  apple     1      0    0        1    1       1  65
10 mary  grape     0      0    0        0    1       2  65
11 mary orange     0      1    0        0    1       3  65
12 mary  apple     1      0    0        1    1       4  65
13  tom orange     0      1    0        0    1       1  12

答案 1 :(得分:2)

这是你想要做的吗?

df_agg <- aggregate(age ~ noms, df_large, max)
merge(df_agg, df_small, by = "noms")

或者如果你不关心年龄,

df_agg <- data.frame(nom = unique(df_large$noms))
merge(df_agg, df_small, by = "noms")