合并不同大小的数据框并重复值

15

我需要合并两个不同大小的数据框。较大的一个(df1)有一个带有多个重复值的列 (licto),较短的一个(df2)有 licto 列,但其值没有重复。df2还有一个ID列。我需要在df1中新增一列,其中包含根据licto中的重复值重复的df2中的IDs。下面的示例可能会更加清晰。

df1<-data.frame(licfrom=c(15470,16307,17121,15350,16982,17182,20319,16727,16946,16262,16605,
              16607,15924,15399,15404,16739,16839,16842,16899,16157,15399),
        licto=c(17121,17121,17121,16982,16982,16982,16982,16946,16946,16262,16607,
            16607,15924,16839,16839,16839,16839,16839,16839,16157,15399))

.

df2<-data.frame(licto=c(17121,16982,16946,16607,15924,16839,16157,15399),
        fisherID=c(160,760,770,406,106,2196,17323,2441))

我的数据框看起来像这样:

df1                 df2 
licfrom licto       licto   fisherID
15470   17121       17121   160
16307   17121       16982   760
17121   17121       16946   770
15350   16982       16262   947
16982   16982       16607   406
17182   16982       15924   106
20319   16982       16839   2196
16727   16946       16157   17323
16946   16946       15399   2441
16262   16262           
16605   16607           
16607   16607           
15924   15924           
15399   16839           
15404   16839           
16739   16839           
16839   16839           
16842   16839           
16899   16839           
16157   16157           
15399   15399   

我的最终数据框应该像这样:

licfrom licto   fisherID
15470   17121   160
16307   17121   160
17121   17121   160
15350   16982   760
16982   16982   760
17182   16982   760
20319   16982   760
16727   16946   770
16946   16946   770
16262   16262   947
16605   16607   406
16607   16607   406
15924   15924   106
15399   16839   2196
15404   16839   2196
16739   16839   2196
16839   16839   2196
16842   16839   2196
16899   16839   2196
16157   16157   17323
15399   15399   2441

非常感谢任何帮助,因为我已经花费了几个小时尝试合并所需的内容。我已经使用了merge%in%,但都没有成功。谢谢!

2个回答

11
你可以使用函数merge()来简单完成它。
 merge(df1,df2,sort=FALSE)

   licto licfrom fisherID
1  17121   15470      160
2  17121   17121      160
3  17121   16307      160
4  16982   15350      760
5  16982   16982      760
6  16982   20319      760
7  16982   17182      760
8  16946   16727      770
9  16946   16946      770
10 16607   16605      406
11 16607   16607      406
12 15924   15924      106
13 16839   15399     2196
14 16839   15404     2196
15 16839   16739     2196
16 16839   16839     2196
17 16839   16842     2196
18 16839   16899     2196
19 16157   16157    17323
20 15399   15399     2441

1
比我想象的简单,只需添加排序参数即可。非常感谢。 - Rafael

4
为了更清晰地说明选项,您可以尝试这个。
merge(df1, df2, by = "licto", all = TRUE, sort = FALSE)

1
这更像是对之前答案的评论,而不是新的答案。 - Thomas

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接