iiiiiiiiiii 数据框或矩阵a a1 a2 ZZ 1 1 8 1 2 9 1 3 4 2 4 5 2 5 7 3 6 9 数据框或矩阵b b1 b2 1 1 1 2 2 4 3 6 如果在数据库中将a和b看成是两个表,希望实现的结果是 select b.*,a.ZZ from a,b where a.a1=b.b1 and a.a2=b.b2 结果为: b1 b2 ZZ 1 1 8 1 2 9 2 4 5 3 6 9 不知道在R中要如何实现? 我想用match,可是只能匹配到1列,不知道2列要怎么连接比较简单? 谢谢
yihui 嗯,用merge就好了:merge(a, b, by.x=c('a1','a2'),by.y=c('b1','b2')) 看样子你比较熟悉SQL语句,那么你也可以把两张表当作数据库用RODBC包去做SQL查询。可以参考我这篇小文:http://www.yihui.name/cn/read.php/2.htm,用RODBC处理数据库还是很方便的,推荐一下:)
iiiiiiiiiii 谢谢各位 不过有个很奇怪的问题,为什么merge后行数会变了? 我是用all.x=TRUE 保证x的行全被保留下来,不匹配的就加NA merge_TAData1to10k_NA=merge(TAData3,hits2,by.x=c('chrIndex','probestart'),by.y=c('chr','start'),all.x=TRUE) ===结果: > dim(merge_TAData1to10k_NA) [1] 1004625 3 > dim(TAData3) [1] 1000000 2 我预想的结果应该是1000000 行才对,怎么会变成 1004625 行?
iiiiiiiiiii 顶下 merge(a, b, by.x=c('a1','a2'),by.y=c('b1','b2')) 如果要完全保留a的所有行,即使在b中无匹配项,是否是用all.x=TRUE即可? 但我测试了2份数据都是多出了行,对不上号了。