2017-06-22 56 views
0

我在解决有关在数据框中选择值的问题时遇到了一些困难。这里是: - 我有一个数据框包含这些变量:x坐标,y坐标,直径,G值,H值,质量值,生态价值。每一行对应一个单独的(这也是这项运动树)R:选择具有条件的x,y坐标

  • 我需要找到最好的质量值的个体=这个我能做到这一点
  • 但后来,我一定要找到第二棵树具有良好的质量值,该值必须位于参考树的10个下一米(具有最佳质量值的米)中。
  • 这个选择必须在选择的每棵树上进行,每次进一步增加10米!
  • 这应该让我选择x-y坐标,它们之间相距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或x y的形式返回值? (没有任何0或«»或空格)还是应该使用另一个R函数来获得这个结果?

第二个问题很复杂:我怎么能说R让他从第一次尝试中发现的坐标和整个数据中重复这个功能?

回答

0

对于我来说,尝试一下没有使用数据集或其中的一个小例子有点难,但我认为以下内容应该适用于您的第一个问题。

使用的功能,当您第一次输入X和有品质的24 x和y在你的函数树的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])) 

请注意,此代码只打印出结果,但也有一些聪明的分配策略可以或许保存它们

0

非常感谢您的回答。它帮助我很多!我的问题的第一部分已经解决了,第二部分似乎在某处存在一个错误...而且我并没有清楚地看到功能对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.

+0

哦,那就是for命令缺少一个右括号 –

+0

是的,我已经看到它!但是它仍然不起作用。 '> Arbres <-kk(x.Koordinate,y.Koordinate,data = data) > for(i in 1 :(length(Arbres [,1]))){ + kk(Arbres [i,1],Arbres [i,2]) +} kk中的错误(Arbres [i,1],Arbres [i,2]): 承诺已在评估中:递归默认参数引用或更早的问题?' –

+0

我在原始响应中更正了一些编码错误,但我无法重现您的错误,所以我不确定是什么驱动它。我发布的代码现在在我的机器上运行良好,但它只打印结果,并不实际保存它们。关于进一步的10米,我认为这是你使用x和y坐标的逻辑条件。 –