如何使用数据帧中的标记对超帧的点模式进行子集化

时间:2018-10-29 21:37:15

标签: r spatstat

我有93行超帧。每行包含ppp类树木的茎图以及地块级别分组因子。标记的数据框提供特定于点的数据,例如每个点的直径,种类和高度。 我需要根据标记的数据帧对点模式进行子集化,然后运行L est函数,该函数需要将数据汇总。我发现了单点模式的子集标记示例和基于超帧列的子帧超帧子集示例,但是我没有看到示例子帧超集的子集标记模式调用具有多个标记的数据帧中某个因子的级别。任何指导将不胜感激。

我可以按地块级别因子对超帧进行子集划分,比如说a,b和c植被类型,然后为每个地块运行一次Lest,根据植被类型合并输出,并绘制合并的Lest(第684页) Baddeley等人(2015年)的论文提供了一个有用的示例)。

但是,我无法基于数据帧的特定标记对超帧的点模式进行子集化。我不确定我的数据结构是否会导致问题,因此我将其包含在下面,或者是否只是混淆了与超帧的多点模式相关联的数据帧标记子集的代码(此处为R新手。列表中的列表会造成混淆)。

数据构造:

    z.list <- mapply(as.ppp, X = df.list, W = window.list, SIMPLIFY=FALSE) 
     #df.list contains x,y coordinates, followed by columns of point specific 
      #data. 
    h <- hyperframe(X=z.list)
    H <- cbind.hyperframe(h, plot.df1)#combine the point pattern and marks 
     #with plot level data

数据结构:

     str(H)
    'hyperframe':    93 rows and 14 columns 
     $ X : objects of class ppp 
     $ PLOTID : factor 0102U001 0104U001 0104U002 ... 
     $ Group1 : integer 1 2 1 ... 
     $ Group2 : numeric 2.0 2.5 2.0 ... 

    str(H[1,]$X) #str of the ppp of the hyperframes first row
    List of 1
    $ X:List of 6
    ..$ window    :List of 5
    .. ..$ type  : chr "polygonal"
    .. ..$ xrange: num [1:2] 516441 516503
    .. ..$ yrange: num [1:2] 3382698 3382804
    .. ..$ bdry  :List of 1
    .. .. ..$ :List of 2
    .. .. .. ..$ x: num [1:4] 516503 516502 516441 516442
    .. .. .. ..$ y: num [1:4] 3382698 3382804 3382804 3382698
    .. ..$ units :List of 3
    .. .. ..$ singular  : chr "metre"
    .. .. ..$ plural    : chr "metres"
    .. .. ..$ multiplier: num 1
    .. .. ..- attr(*, "class")= chr "unitname"
    .. ..- attr(*, "class")= chr "owin"
    ..$ n         : int 107
    ..$ x         : num [1:107] 516501 516473 516470 516474 516474 ...
    ..$ y         : num [1:107] 3382801 3382723 3382726 3382734 3382732 ...
    ..$ markformat: chr "dataframe"
    ..$ marks     :'data.frame':    107 obs. of  3 variables:
    .. ..$ DBH_Class: Factor w/ 16 levels "11.25","13.75",..: 7 5 13 12 8 4 9 
    .. ..$ Ingrowth : Factor w/ 7 levels "DD","I_DD","I_LD_MY",..: 7 6 6 7 
    .. ..$ PlotID    : Factor w/ 93 levels "0102U001","0104U001",..: 1 1 1 1 
    ..- attr(*, "class")= chr "ppp"
    - attr(*, "class")= chr [1:5] "ppplist" "solist" "anylist" "listof" ...

上面的内容对我来说似乎是正确的,但是我注意到尽管标记是用str函数打印的,但是is.multipoint的输出为FALSE。不知道这是否是我的问题的一部分。 以下内容对于位于超帧行中的绘图级因子非常有用。

    H$L <- with(H, Lest((X),rmax=40))
    L.VT.split <- split(H$L, H$VEG_TYPE) #plot level factor
    L.VT.pool <- anylapply(L.VT.split, pool)
    plot(L.VT.pool,cbind(pooliso, pooltheo, hiiso,loiso)-r~r,
      shade=c("hiiso","loiso"),equal.scales=TRUE, main='')

但是如何使用数据帧中的标记执行相同的操作?

1 个答案:

答案 0 :(得分:0)


我不确定我是否很理解这个问题,但我会尽力提供 无论如何,一些有用的提示...

对于describe('SearchImages$', () => { it('should return loadImages action', fakeAsync(() => { const action = new fromImageLibraryActions.SearchImages('test'); const images = [ { uploaderId: 1 } as LibraryImage, { uploaderId: 2 } as LibraryImage ]; const loadImagesAction = new fromImageLibraryActions.LoadImages(images); actions$ = hot('--a-', { a: action }); tick(300); getTestScheduler().flush(); const expected = cold('--b-', { b: loadImagesAction }); expect(effects.searchImage$).toBeObservable(expected); })); }); 中的每一行,您都有一个包含标记的点模式 H中的信息(三列称为data.frameDBH_ClassIngrowth)。这是一些具有这种结构的伪数据:

PlotID

通过特定标记(library(spatstat) set.seed(42) df1 <- data.frame(x = runif(3), y = runif(3), DBH_Class = factor(1:3), Ingrowth = LETTERS[1:3], PlotID = letters[1:3]) X1 <- as.ppp(df1, W = square(1)) df2 <- data.frame(x = runif(3), y = runif(3), DBH_Class = factor(1:3), Ingrowth = LETTERS[1:3], PlotID = letters[1:3]) X2 <- as.ppp(df2, W = square(1)) H <- hyperframe(X = list(X1 = X1, X2 = X2)) H #> Hyperframe: #> X #> 1 (ppp) #> 2 (ppp) plot(H$X, which.marks = "Ingrowth") 此示例)使用Ingrowth

subset

X1B <- subset(X1, Ingrowth == "B") X列中的每个模式都相同:

H