簡體   English   中英

如何在2個數據幀ID之間進行匹配並在R循環中運行操作?

[英]How to match across 2 data frames IDs and run operations in R loop?

我有2個數據幀,即采樣(“ samp”)和坐標(“ coor”)。

“樣本”數據幀:

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

“較差”數據框:

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”功能,以從“ coor”數據幀的GPS坐標中注冊“ samp”數據幀-例如,“ new_x”變量是“ samp”和“ x”的總和。相同的“地塊” ID下的“ coor”。

這是我嘗試但無法正常工作的方法。

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])

}

我希望擁有的最終輸出是在“樣本”數據幀上創建了適當的坐標變量(“ new_x”)。 它看起來應該像這樣:

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

任何建議將不勝感激。 謝謝。

您可以merge兩個數據集,並通過對XxXy變量求和來創建新列。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM