我有2个数据帧:
dat:9个变量的1900个障碍
V1 V2 V3 V4 V5 V6 V7 V8 V9
1 V_P50P50_Q3 chr12 106642383 106642395 + 18.1425 4.03e-08 0.0515 GGGGGACTCCCCC
2 V_P50RELAP65_Q5_01 chr8 142276666 142276677 - 16.6429 2.51e-07 0.2780 GGGATTTCCCAC
3 V_RELA_Q6 chr22 51020067 51020078 - 15.9395 2.71e-07 0.3350 GGGAATTTCCCC
4 V_NFKB_Q6_01 chr14 98601454 98601469 + 17.0684 3.08e-07 0.236 GGAGTGGAAATTCC
5 V_CREL_Q6 chr22 51020068 51020079 - 16.1165 3.19e-07 0.4050 AGGGAATTTCCC
dat.markov:1486 obs of 9 variables
V1 V2 V3 V4 V5 V6 V7 V8 V9
1 V_NFKB_Q6_01 chr14 98601454 98601469 + 17.2212 1.33e-07 0.146 GGAGTGGAAATTCCCT
2 V_P50P50_Q3 chr12 106642383 106642395 + 16.9358 1.57e-07 0.201 GGGGGACTCCCCC
3 V_CREL_Q6 chr22 51020068 51020079 - 16.0549 2.29e-07 0.292 AGGGAATTTCCC
4 V_NFKB_Q6_01 chr22 51020064 51020079 + 16.9906 2.32e-07 0.146 TTGGGGGAAATTCCCT
5 V_RELA_Q6 chr22 51020067 51020078 - 15.7496 3.42e-07 0.433 GGGAATTTCCCC
我需要合并两个数据帧,以便在两个data.frames之间获得匹配列V1,V2,V3和V4的所有行。
我试过了:
y<-merge(dat,dat.markov,by=c("V1","V2","V3","V4"))
它给了我一个合并的数据帧但是有1513个obs。但从技术上讲,观测数量应等于或小于较小的数据帧,即1486 obs。
我合并的data.frame在返回的列数方面看起来不错:
V1 V2 V3 V4 V5.x V6.x V7.x V8.x V9.x V5.y
1 V_CREL_01 chr10 112778464 112778473 + 12.9434 1.94e-05 0.694 TGGGTTTTCC +
V6.y V7.y V8.y V9.y
1 12.8838 2.35e-05 0.788 TGGGTTTTCC
我知道你可以使用一列来交叉data.frames但是有一种方法可以在多列上交叉两个data.frames吗?
答案 0 :(得分:3)
如果我理解,您希望第1,2,3,4列在两个帧中完美匹配以保留它们吗?除了merge
,我还会使用interaction
和match
函数
dat$combine = as.character(interaction(dat$V1, dat$V2, dat$V3, dat$V4))
dat.markov$combine = as.character(interaction(dat.markov$V1, dat.markov$V2, dat.markov$V3, dat.markov$V4))
dat.overlap = dat[complete.cases(match(dat.markov$combine, dat$combine)),]