Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R中数据合并的查找/匹配备选方案_R_Merge_Dplyr_Lookup - Fatal编程技术网

R中数据合并的查找/匹配备选方案

R中数据合并的查找/匹配备选方案,r,merge,dplyr,lookup,R,Merge,Dplyr,Lookup,我有两个数据集要根据第一个数据表的属性合并 dat1 <- read.table(header=TRUE, text=" ID log MN CD NM a001 0.1 dat01 mn34 tt03 a002 2.3 dat02 mn35 tt09 a003 4.5 dat03 mn36 tt15 a004 7.89 dat0

我有两个数据集要根据第一个数据表的属性合并

dat1 <- read.table(header=TRUE, text="
ID  log MN  CD  NM
a001    0.1 dat01   mn34    tt03
                   a002 2.3 dat02   mn35    tt09
                   a003 4.5 dat03   mn36    tt15
                   a004 7.89    dat04   mn37    tt21
                   a005 4.1 dat05   mn38    tt27
                   a006 4.5 dat06   mn39    tt33
                   a007 6.1 dat13   mn40    tt39
                   a008 9   dat14   mn41    tt45
                   a009 2.3 dat15   mn42    tt51
                   a010 3.4 dat16   mn01    tt57
                   a011 3.23    dat17   mn02    tt63
                   a012 1.23    dat18   mn03    tt69
                   a013 2.11    dat19   mn04    tt75
                   ")
dat1
     ID  log    MN   CD   NM
1  a001 0.10 dat01 mn34 tt03
2  a002 2.30 dat02 mn35 tt09
3  a003 4.50 dat03 mn36 tt15
4  a004 7.89 dat04 mn37 tt21
5  a005 4.10 dat05 mn38 tt27
6  a006 4.50 dat06 mn39 tt33
7  a007 6.10 dat13 mn40 tt39
8  a008 9.00 dat14 mn41 tt45
9  a009 2.30 dat15 mn42 tt51
10 a010 3.40 dat16 mn01 tt57
11 a011 3.23 dat17 mn02 tt63
12 a012 1.23 dat18 mn03 tt69
13 a013 2.11 dat19 mn04 tt75


dat2 <- read.table(header=TRUE, text="
ID  LT  LF  DC  TM  NM
a001    0   1   p01 p001    pn07
                   a003 4.1 4.9 p02 p002    pn08
                   a004 2.1 5.6 p03 p003    pn09
                   a008 8.7 9.29    p04 p004    pn10
                   a009 2   2.3 p05 p005    pn11
                   a010 1   2   p06 p006    pn12
                   a023 1   2   p07 p007    pn13
                   a024 1   2   p08 p008    pn14
                   ")

dat2

    ID  LT   LF  DC   TM   NM
1 a001 0.0 1.00 p01 p001 pn07
2 a003 4.1 4.90 p02 p002 pn08
3 a004 2.1 5.60 p03 p003 pn09
4 a008 8.7 9.29 p04 p004 pn10
5 a009 2.0 2.30 p05 p005 pn11
6 a010 1.0 2.00 p06 p006 pn12
7 a023 1.0 2.00 p07 p007 pn13
8 a024 1.0 2.00 p08 p008 pn14
我希望合并两个表中所有列值的数据。这只是一个包含2000000行和1700列的大型表的示例

库(dplyr)
library(dplyr)
dat <- left_join(dat1, dat2, by = "ID")
dat_fil <- filter(dat, log >= LT, log <= LF)
dat_fil

    ID log    MN   CD NM.x  LT   LF  DC   TM NM.y
1 a001 0.1 dat01 mn34 tt03 0.0 1.00 p01 p001 pn07
2 a003 4.5 dat03 mn36 tt15 4.1 4.90 p02 p002 pn08
3 a008 9.0 dat14 mn41 tt45 8.7 9.29 p04 p004 pn10
4 a009 2.3 dat15 mn42 tt51 2.0 2.30 p05 p005 pn11
dat尝试数据表方式:)

您可以通过设置表的键来进一步优化它的速度。输入?data.table,检查快速“键控”子集,并查看小插曲

library(dplyr)
dat <- left_join(dat1, dat2, by = "ID")
dat_fil <- filter(dat, log >= LT, log <= LF)
dat_fil

    ID log    MN   CD NM.x  LT   LF  DC   TM NM.y
1 a001 0.1 dat01 mn34 tt03 0.0 1.00 p01 p001 pn07
2 a003 4.5 dat03 mn36 tt15 4.1 4.90 p02 p002 pn08
3 a008 9.0 dat14 mn41 tt45 8.7 9.29 p04 p004 pn10
4 a009 2.3 dat15 mn42 tt51 2.0 2.30 p05 p005 pn11
dat1 = data.table(dat1)
dat2 = data.table (dat2)

merged.dat = dat2 [dat1, on = "ID"] [ LT <= log & log <= LF ]
     ID  LT   LF  DC   TM   NM log    MN   CD i.NM
1: a001 0.0 1.00 p01 p001 pn07 0.1 dat01 mn34 tt03
2: a003 4.1 4.90 p02 p002 pn08 4.5 dat03 mn36 tt15
3: a008 8.7 9.29 p04 p004 pn10 9.0 dat14 mn41 tt45
4: a009 2.0 2.30 p05 p005 pn11 2.3 dat15 mn42 tt51