现有以下两个数据x,y,当然只取出一小部分举例说明
x
LT LG Y ID
1 34.8 72.4 1997 349.1591
2 34.8 72.4 1998 349.1591
3 34.8 72.4 1999 349.1591
4 34.8 72.4 2000 349.1591
5 34.8 72.4 2001 349.1591
6 35.2 72.5 1997 347.3541
7 35.2 72.5 1998 347.3541
8 35.2 72.5 1999 347.3541
9 35.2 72.5 2000 347.3541
10 35.2 72.5 2001 347.3541
11 35.2 73.1 1997 347.3983
12 35.2 73.1 1998 347.3983
13 35.2 73.1 1999 347.3983
14 35.2 73.1 2000 347.3983
15 35.2 73.1 2001 347.3983
16 35.3 71.9 1997 347.3636
17 35.3 71.9 1998 347.3636
18 35.3 71.9 1999 347.3636
19 35.3 71.9 2000 347.3636
20 35.3 71.9 2001 347.3636
y
SP P LT LG Y T
1 Abies balsamea (balsam fir) A.F.E.S. 45.6 66.2 1999 7.62
2 Abies balsamea (balsam fir) ACADIEVILLE 46.4 65.2 1999 8
3 Abies balsamea (balsam fir) ASTLE 46.2 66.3 1999 7.32
4 Abies balsamea (balsam fir) BAY D'ESPOIR 47.4 55.3 1999 9.14
5 Abies balsamea (balsam fir) BEAR LAKE 47.1 66.1 1998 9.81
我想根据y中LT,LG和Y三个值在x中LT,LT和Y相同的行匹配出来,添加到y中,得到如下结果
SP P LT LG Y T ID
Abies balsamea (balsam fir) FRENCH RIVER 45.3 62.3 1997 11.15 306.1589
Abies balsamea (balsam fir) OT SPOT ROAD 46.2 60.5 1997 11.41 302.2083
Abies balsamea (balsam fir) CKENZIE ROAD 46.2 60.5 1997 10.1 302.2083
Abies balsamea (balsam fir) NORTH RIVER 46.2 60.5 2001 NA 302.2083
Abies balsamea (balsam fir) OTTAWA 45.2 75.3 1999 8.96 306.5334
Abies balsamea (balsam fir) OTTAWA 45.2 75.3 1999 7.48 306.5334
我使用的程序是
xflag=paste(x[,1],x[,2],x[,3])
yflag=paste(y[,3],y[,4],y[,6])
id1=yflag%in%xflag
id2=sapply(yflag[id1],function(x)which(x==xflag))
result=data.frame(y[id1,],x[id2,3:7])
这样只能匹配出LT,LG,Y完全一致的结果,三个指标分别为纬度、经度和年份,我想采用模糊匹配的方法,即在年份一样的情况下,在Y中匹配出LT,LG与Y中LT,LG距离最小的数据添加到Y中,并增加两列分别为X,Y中LT和LG的差值,当然如果有完全一致的这两列应该为0。不知道有没有讲清楚这个问题,请大家多提宝贵意见。