如何匹配2个数据帧ID并在R循环中运行操作?

时间:2015-03-14 16:10:25

标签: r

我有2个数据框,采样(" samp")和坐标(" coor")。

" samp"数据框:

Plot    X   Y   H   L
1   6.4 0.6 3.654   0.023
1   19.1    9.3 4.998   0.023
1   2.4 4.2 5.568   0.024
1   16.1    16.7    5.32    0.074
1   10.8    15.8    6.58    0.026
1   1   16  4.968   0.023
1   9.4 12.4    6.804   0.078
2   3.6 0.4 4.3 0.038
3   12.2    19.9    7.29    0.028
3   2   18.2    7.752   0.028
3   6.5 19.9    7.2 0.028
3   3.7 13.8    5.88    0.042
3   4.9 10.3    9.234   0.061
3   3.7 13.8    5.88    0.042
3   4.9 10.3    9.234   0.061
4   16.3    2.4 5.18    0.02
4   15.7    9.8 10.92   0.096
4   6   12.6    6.96    0.16
5   19.4    16.4    8.2 0.092
10  4.8 5.16    7.38    1.08
11  14.7    16.2    16.44   0.89
11  19  19  10.2    0.047
12  10.8    2.7 19.227  1.2
14  0.6 6.4 12.792  0.108
14  4.6 1.9 12.3    0.122
15  12.2    18  9.6 0.034
16  13  18.3    4.55    0.021

" coor"数据框:

Plot    X   Y
1   356154.007  501363.546
2   356154.797  501345.977
3   356174.697  501336.114
4   356226.469  501336.816
5   356255.24   501352.714
10  356529.313  501292.4
11  356334.895  501320.725
12  356593.271  501255.297
14  356350.029  501314.385
15  356358.81   501285.955
16  356637.29   501227.297
17  356652.157  501263.238
18  356691.68   501262.403
19  356755.386  501242.501
20  356813.735  501210.59
22  356980.118  501178.974
23  357044.996  501168.859
24  357133.365  501158.418
25  357146.781  501158.866
26  357172.485  501161.646

我希望运行" for loop"注册" samp"的功能带有来自" coor"的GPS坐标的数据框。数据框 - 例如" new_x"变量是" X"的总和输出。来自" samp"和" coor" ,在同一个" Plot"的ID。

这是我尝试但不工作的。

for (i in 1:nrow(samp)){

    if (samp$Plot[i]==coor$Plot[i]){

        (samp$new_x[i]<-(coor$X[i] + samp$X[i]))

}           else (samp$new_x[i]<-samp$X[i])

}

我希望得到的最终输出是在&#34; samp&#34;上创建了一个合适的坐标变量(&#34; new_x&#34;)。数据框。它应该是这样的:

Plot    X   Y   H   L   new_x
1   6.4 0.6 3.654   0.023   356160.407
1   19.1    9.3 4.998   0.023   356173.107
1   2.4 4.2 5.568   0.024   356156.407
1   16.1    16.7    5.32    0.074   356170.107
1   10.8    15.8    6.58    0.026   356164.807
1   1   16  4.968   0.023   356155.007
1   9.4 12.4    6.804   0.078   356163.407
2   3.6 0.4 4.3 0.038   356158.397
3   12.2    19.9    7.29    0.028   356186.897
3   2   18.2    7.752   0.028   356176.697
3   6.5 19.9    7.2 0.028   356181.197
3   3.7 13.8    5.88    0.042   356178.397
3   4.9 10.3    9.234   0.061   356179.597
3   3.7 13.8    5.88    0.042   356178.397
3   4.9 10.3    9.234   0.061   356179.597
4   16.3    2.4 5.18    0.02    356242.769
4   15.7    9.8 10.92   0.096   356242.169
4   6   12.6    6.96    0.16    356232.469
5   19.4    16.4    8.2 0.092   356274.64
10  4.8 5.16    7.38    1.08    356534.113
11  14.7    16.2    16.44   0.89    356349.595
11  19  19  10.2    0.047   356353.895

任何建议将不胜感激。谢谢。

1 个答案:

答案 0 :(得分:0)

您可以merge两个数据集,并通过汇总X.xX.y变量来创建新列。

res <- transform(merge(samp, coor, by='Plot'), new_x=X.x+X.y)[,-c(6:7)]
colnames(res) <- colnames(out) #`out` is the expected result showed
all.equal(res[1:22,], out, check.attributes=FALSE)
#[1] TRUE