簡體   English   中英

R:有條件的x,y坐標選擇

[英]R: Selection for x,y coordinates with conditions

我很難解決有關數據幀中值選擇的問題。 事情是這樣的:-我有一個包含以下變量的數據框:x坐標,y坐標,直徑,G值,H值,質量值,生態價值。 每行對應一個人(本練習中為樹)

  • 我需要找到具有最佳質量價值的個人=我可以做到
  • 但是,然后,我必須找到具有良好質量值的第二棵樹,該樹必須位於參考樹的接下來的10米(具有最佳質量值的樹)中。
  • 而且必須在每棵選擇的樹處進行選擇,每次距離樹10米!
  • 這應該使我選擇xy坐標,它們之間相隔10米,代表了良好的質量值。

現在,這是我嘗試的方法:

    > kk<- function(x, y) 
+ { 
+   coordx<-data$x.Koordinate[data$Q==24] #I have looked before for the best quality value of the sample, which is 24
+   coordy<-data$y.Koordinate[data$Q==24]
+   x <- ifelse(data$x.Koordinate>coordx-11 & data$Q>15,data$x.Koordinate,0) #I choose that I did'nt wanted to have less than 15 of quality value
+   y<-ifelse(data$y.Koordinate>coordy-11 & data$Q>15,data$y.Koordinate,0)#-11 meters from the reference coordinates, the next tree selected has to be inbetween
+   return(c(x,y))
+ }
> kk(data$x.Koordinate, data$y.Koordinate)
 [1]      0      0      0      0      0 205550 205550      0 205600 205600      0      0      0      0      0      0      0
[18] 604100      0 604150 604100      0

這里的問題是我們不能清楚地看到x坐標和y坐標之間的差異。

我嘗試了這個:

 > kk<- function(x, y) 
+ { 
+   coordx<-data$x.Koordinate[data$Q==24]
+   coordy<-data$y.Koordinate[data$Q==24]
+   x <- ifelse(data$x.Koordinate>coordx-11 & data$Q>15,data$x.Koordinate," ")
+   y<-ifelse(data$y.Koordinate>coordy-11 & data$Q>15,data$y.Koordinate," ")
+   return(list(x,y))
+ }
> kk(data$x.Koordinate, data$y.Koordinate)
[[1]]
 [1] " "      " "      " "      " "      " "      "205550" "205550" " "      "205600" "205600" " "     

[[2]]
 [1] " "      " "      " "      " "      " "      " "      "604100" " "      "604150" "604100" " "     

>

我們可以更好地看到與x和y坐標相關的兩個級別。

第一個問題很簡單:此函數是否可能以x,y或xy的形式返回值? (沒有任何0或«»或空格)還是我應該使用另一個R函數來獲得此結果?

第二個問題很復雜:我如何對R說從他在第一次嘗試中發現的坐標以及對整個數據重復此功能?

如果沒有您的數據集或它的一個小例子,對我來說很難嘗試一下,但是我認為以下內容應該可以解決您的第一個問題。

首次使用該函數時,輸入函數中具有x和y的質量為24的樹的x和y坐標

> kk<- function(x, y) 
+ {
+   coordx<-x
+   coordy<-y
+   x1 <- ifelse(data$x.Koordinate>coordx-11 &  data$Q>15,data$x.Koordinate,NA) 
+   y1 <- ifelse(data$y.Koordinate>coordy-11 & data$Q>15,data$y.Koordinate,NA)
 +   return(matrix(c(x1,y1),nrow=length(x1), ncol=2, dimnames=list(NULL, c("x","y"))))
 + }

這將為您提供一個矩陣,該矩陣具有與x和y坐標對應的兩列以及一個不滿足條件的NA。

第二個問題更加困難,因為正如您的輸出已經顯示的那樣,有許多樹都符合您設置的條件。 如果要再次檢查所有這些內容,則可以循環使用函數的輸出。 像這樣:

Tree1_friends<-kk(data$x.Koordinate[data$Q==24], data$y.Koordinate[data$Q==24])
    for (i in 1:length(Tree1_friends[,1]))
 print(kk(Tree1_friends[i,1],Tree1_friends[i,2]))

請注意,此代碼僅打印結果,但是通過一些巧妙的分配策略,您也可以保存它們

非常感謝您的回答。 它對我有很大幫助! 我的問題的第一部分得到了解決,第二部分似乎在某個地方有錯誤……而且我不清楚該函數告訴R在哪里每走10米(實際上,據我說,每50米)數據,請參見下文)...但是無論如何,謝謝您,這是一個很好的起點,我將繼續研究這個問題:) PS:我知道沒有數據是很困難的。 不幸的是,我無法在網上展示它們。 但是,我可以向您展示其中的一部分:

      ID Bezeichnung x.Koordinate y.Koordinate  Q    N hdom   V Mittelstamm Fi Ta Foe Lae ueN  Bu Es Ei Ah ueL Struktur
1  10,809          62       205450       603950  8 1067   21  64          10 NA NA  NA  NA  NA 100 NA NA NA  NA       NA
2  10,810          63       205450       604000 16 1333   22 128          12 NA NA  NA  NA  NA  75 NA NA 25  NA       NA
3  10,811          56       205500       604050 20  800   22 160          18 NA NA  NA  NA  NA  60 NA NA NA  40       NA
4  10,812          55       205500       604000 12 1033   20  97          12 33 NA  NA  NA  NA  67 NA NA NA  NA       NA
5  10,813          54       205500       603950 20  500   56   0          23 NA NA  NA  NA  NA 100 NA NA NA  NA       NA
6  10,814          46       205550       604050 16  567   32 215          19 75 NA  NA  NA  NA  25 NA NA NA  NA       NA
7  10,815          47       205550       604100 16  233   26 174          30 NA 25  NA  NA  NA  50 NA NA NA  25       NA
8  10,816          48       205550       604150  0 1167   16   0           0 NA NA  NA  NA  NA  NA NA NA NA  NA       NA
9  10,817          43       205600       604150 24  633   33 366          22 83 17  NA  NA  NA  NA NA NA NA  NA       NA
10 10,818          42       205600       604100 16 1500   33 282          12 NA NA  NA  NA  NA  NA NA NA 75  25       NA

這是您對第二個問題的回答的結果:

> Arbres<-kk(x.Koordinate, y.Koordinate, data=data)
> for (i in 1:length(Arbres[,1])
+   kk(Arbres(i,1),Arbres[i,2])
Error: unexpected symbol in:
"for (i in 1:length(Arbres[,1])
  kk"

抱歉,我將其重命名為“ Arbre”

再次感謝,C。

暫無
暫無

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

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