根据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), ]