簡體   English   中英

R:循環,ifelse和兩個條件

[英]R: loop for, ifelse and two conditions

我嘗試使用ifelse函數進行循環。 不幸的是,它不起作用。 這是我的代碼:

> data$x.Koordinate<-as.numeric(data$x.Koordinate)
> data$G<-as.numeric(data$G)
> for (i in 1:length(data$x.Koordinate)) {
+ ifelse((data$x.Koordinate[i]/data$x.Kooridnate[i+1]==1)& ifelse((data$G[i+1]<16),"nothing",data$x.Koordinate[i+1]))
+ }
Error in (data$x.Koordinate[i]/data$x.Kooridnate[i + 1] == 1) & ifelse((data$G[i +  : 
  operations are possible only for numeric, logical or complex types

關於該問題的解釋:我試圖對R說到我的變量x.Koordinate的每個x坐標,然后將其除以最后一個。 如果結果為1 =相同的坐標,否則返回不同的坐標。 因此,我希望R在相同的坐標下並且該坐標的G值小於16(第二種情況)時說“無”或“空”。 如果它不等於1,並且G的值大於16,請給我這個坐標。

我不明白為什么我的代碼中有錯誤,因為我已經將變量放入數字中。

這是我的數據:

ID Bezeichnung x.Koordinate y.Koordinate  G    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

謝謝您的幫助!

編輯

嗨,現在我已經嘗試過了:

test<- function(x) { for (i in 1:length(data$x.Koordinate)) {
  result<-ifelse(data$x.Koordinate[i] == data$x.Kooridnate[i+1], ifelse(data$G[i+1]<16, "null", data$x.Kooridnate[i+1]))
return(result)
  }}

但這什么也沒給我...

  • 您的第一個ifelse沒有任何yes或no參數。
  • 您不需要2 ifelse只是因為您有2個條件。
  • 您可以直接測試a == b,為什么要測試a / b == 1呢?
  • 在第一個示例中,您沒有將ifelse的結果分配給任何東西
  • 在最后一個示例中,您嘗試在循環的每次迭代中返回結果
  • 如果我達到長度(data $ x.Koordinate),則項目i + 1將不存在。
  • 您在兩次嘗試中都將“ Koordinate”拼寫為“ Kooridnate”

我不確定您希望如何存儲輸出,但是我認為這可以為您提供所需的信息:

for (i in 1:(length(data$x.Koordinate)-1)) {
  print(ifelse(data$x.Koordinate[i] == data$x.Koordinate[i+1] & data$G[i+1]<16,"nothing",data$x.Koordinate[i+1]))
}

暫無
暫無

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

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