根据R中的id号复制行

根据R中的id号复制行,r,R,我有一个数据帧(mydf1),其中序列号(在序列列中)是重复的。我想根据mydf1中出现的序列计数数,复制另一个数据帧(mydf2)中的行,并获得结果表。谢谢你的帮助 mydf1 serial var1 var2 122 a d 222 b e 321 c f 321 fd fs 222 bx eg mydf2 serial varA varB 122

我有一个数据帧(
mydf1
),其中序列号(在序列列中)是重复的。我想根据mydf1中出现的序列计数数,复制另一个数据帧(
mydf2
)中的行,并获得
结果
表。谢谢你的帮助

mydf1

serial  var1 var2 
   122     a    d    
   222     b    e    
   321     c    f  
   321    fd   fs
   222    bx   eg  

mydf2

serial  varA   varB 
   122    an    ddf    
   222    cb    edf    
   321    ff    ffg  

result

 serial  varA  varB 
    122    an   ddf    
    222    cb   edf 
    222    cb   edf    
    321    ff   ffg 
    321    ff   ffg

如果我很棘手,请使用行索引:

`rownames<-`(mydf2,mydf2$serial)[sort(as.character(mydf1$serial)),]
#      serial varA varB
#122      122   an  ddf
#222      222   cb  edf
#222.1    222   cb  edf
#321      321   ff  ffg
#321.1    321   ff  ffg
另一种选择:

mydf2[match(mydf1$serial, mydf2$serial), ]

这对于包含不同或附加值的
mydf1
mydf2

来说应该是稳健的,我可能会指出,行名索引也是如此。我认为这更简单,而且我想得更快。。。。。做得很好。@TheLate Mail,是的,有一秒钟我认为你的方法可能不是,然后我意识到,它是(并且你得到了我的+1;)。我仍然对R感到失望,
match
-ing比覆盖行名然后使用现有变量进行子集设置更快。我认为,
as.character
会影响我回答的时间安排。@最近的一封邮件,R中非正数值索引的性能让我一直感到震惊。我认为字符索引只是在一个愚蠢的搜索中查找的,所以
match
要更快一些,这对于最简单的情况来说是有意义的。另一件让人恼火的事情是,没有办法在base R中存储散列。
fastmatch
做到了这一点,但是使用
match
时,每次调用
match
时都会重新生成散列,这令人恼火。
as.character(mydf1$serial %in% mydf2$serial)
mydf2[match(mydf1$serial, mydf2$serial), ]