1

所以我有一些激光雷达数据,我想计算一些指标(我将在评论中附上数据的链接)。
我也有地面图,我已经提取了周围的激光雷达点,因此每个图有几百个点(19 个图)。每个点都有 X、Y、Z、离地高度和相关图。

我需要在绘图级别计算一堆指标,所以我plotsgroupedsplit(plotpts, plotpts$AssocPlot).
所以现在我有一个数据框,每个绘图都有一个“页面”,所以我可以通过“绘图页面”计算我的所有指标。这对个别地块很有效,但我想自动化它。(是的,我知道只有 19 个图,但这是它的原理,该死!:-P)
到目前为止,我有一个 for 循环来计算指标并将结果放入一个名为Results. 我将组的名称也放入了一个名为的列表groups中。

for(i in 1:length(groups)){
Results$Plot[i] <- groups[i]
Results$Mean[i] <- mean(plotsgrouped$PLT01$Z)
Results$Std.Dev.[i] <- sd(plotsgrouped$PLT01$Z)
Results$Max[i] <- max(plotsgrouped$PLT01$Z)
Results$75%Avg.[i] <- mean(plotsgrouped$PLT01$Z[plotsgrouped$PLT01$Z <= quantile(plotsgrouped$PLT01$Z, .75)])
Results$50%Avg.[i] <- mean(plotsgrouped$PLT01$Z[plotsgrouped$PLT01$Z <= quantile(plotsgrouped$PLT01$Z, .50)])
...
and so on.

当我尝试执行以下操作时会出现问题:
Results$mean[i] <- mean(paste("plotsgrouped", groups[i],"Z", sep="$")). mean()不将 识别paste为对 vector 的引用plotsgrouped$PLT27$Z,而是失败了。我推断这是因为它看到引号并认为,“哦,你只是一些文本,我无法理解你的意思。” 或类似的东西。
顺便说一句,groups 是 19 个地块名称的列表:PLT01-PLT27(有时不连续)和 FTWR,所以我不能简单地为名称的数字部分放置一个序列。
任何人都有更简单的方法来遍历我的测试图并获得任意指标?
我觉得我拥有所有正确的部分,但只是不知道它们如何组合在一起给我想要的东西。

另外,如果有人能为这个问题想出一个更好的标题,

4

1 回答 1

5

尝试:

for(i in seq_along(groups)) {

  Results$Plot[i] <- groups[i] # character names of the groups
  tempZ = plotsgrouped[[groups[i]]][["Z"]]
  Results$Mean[i] <- mean(tempZ)
  Results$Std.Dev.[i] <- sd(tempZ)
  Results$Max[i] <- max(tempZ)
  Results$75%Avg.[i] <- mean(tempZ[tempZ <= quantile(tempZ, .75)])
  Results$50%Avg.[i] <- mean(tempZ[tempZ <= quantile(tempZ, .50)])

}
于 2012-11-04T00:04:37.963 回答