我在解决有关数据框中值的选择问题时遇到了一些困难。这是事情: - 我有一个包含这些变量的数据框:x坐标,y坐标,直径,G值,H值,质量值,生态值。每行对应一个人(本练习中的树木)
现在,这是我尝试过的:
> 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 :(得分:0)
如果没有您的数据集或其中的一个小例子,我会有点难以尝试这一点,但我认为以下内容适用于您的第一个问题。
第一次使用该功能时,在函数中输入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]))
请注意,此代码仅打印结果,但是通过一些聪明的分配策略,您可以保存它们
答案 1 :(得分: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"
抱歉,我只是将其重命名为#34; Arbre&#34;
再次感谢, 下进行。