按照另一个数据框的列对数据框进行排序

3
考虑以下的df: df1 <-data.frame('GID'=c('GID1','GID3','GID2','GID1','GID2'), 'Sequence'= c(4,7,6,2,3)) df2 <- data.frame('GID' = c('GID3','GID1','GID2','GID1','GID2'),'Trial'=c('SA1','SA5','ES4','ES3','ES9')) 我想通过列df2$GIDdf1进行排序,以便可以将df2$Trial列合并到df1中。我知道match可以做到这一点,但是match只能找到值的第一个出现,而我的值重复了。因此,我对如何做到这一点感到困惑,因为这是一个大的data.frame的子集。

您的两个数据集中在“GID”列中存在重复项,可能需要创建一个序列列。 - akrun
为df2创建一个序列列,然后呢? - moth
1个回答

8

你尝试过这种方式使用match吗:df1 <- df1[match(df2$GID, df1$GID),](确保查看结果)?

 GID Sequence
2   GID3        7
1   GID1        4
3   GID2        6
1.1 GID1        4
3.1 GID2        6

您想获取GID、Sequence和Trial的笛卡尔积吗?

此外,df2中是否可能存在不在df1中出现的GID,您希望如何处理?

您是否有作为“键”的数据,可以唯一地标识每个条目?


不,我不需要笛卡尔积。 - moth
不,我不需要笛卡尔积。df1比df2先短。df1没有重复的值,而df2有。然后我扩展了df1,如下所示:df1[df2$GID,]。因此,df2中的所有GID现在都存在于df1中,并由df2复制。唯一标识每个GID的是df2的两列的组合,例如:df2$GID,df2$Trial。这种组合是唯一的,实际上也是我想要转移到df1的。 - moth
实际上, df1 没有将每个 GID 的值与唯一的 Sequence 值匹配,因此我不明白它为什么没有或不应该有重复。 - LostIT
实际上,df2的GID列具有唯一的Trial。因此,df2数据框具有重复的GID,但对于重复的GID具有唯一的Trial编号。你明白我的意思吗? - moth
这不可能是真的,因为例如GID1匹配了SA5和ES3试验。你的意思是df2的“键”是Trial,一个单独的Trial值只能匹配一个GID值吗? - LostIT
如果是这种情况,我无法理解您的最终数据框应该是什么,因为您不想要笛卡尔积。我建议您编辑您的问题并提供您的初始数据,没有任何处理,并说明它们的限制/属性,并展示您的最终数据框应该是什么。 - LostIT

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