R:循环forel,ifelse和两个条件

时间:2017-06-23 09:39:24

标签: r loops if-statement

我尝试使用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说“没有”&#34;或&#34; null&#34;当它是相同的坐标时,该坐标的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)
  }}

但它没有给我任何回报......

1 个答案:

答案 0 :(得分:0)

  • 您的第一个ifelse没有任何参数。
  • 因为你有2个条件,你不需要2个ifelse。
  • 您可以直接测试a == b,为什么要测试a / b == 1?
  • 在您的第一个示例中,您并未将ifelse的结果分配给 任何
  • 在上一个示例中,您尝试在每次迭代时返回结果 循环
  • 如果我达到长度(数据$ x.Koordinate),项目i + 1将不会存在
  • 你拼写了#34; Koordinate&#34; as&#34; Kooridnate&#34;在第二次出现在你的两次尝试中

我不确定您希望如何存储输出,但我认为这可以为您提供所需内容:

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