我想仔细检查一下。我正在尝试将大型数据集合并到一个较小的数据集中。我的大型数据框具有未包含在小型数据集中的观察结果。我无法使用标准代码
获得与我的数据帧的简单合并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
答案 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")