R语言 空间点数据框中的随机点子集

icnyk63a  于 2023-11-14  发布在  其他
关注(0)|答案(2)|浏览(102)

我需要从我在ArcGIS中创建的网格中选择R中的随机点。
我有一个大SpatialPointsDataFrame与160831元素(点)命名为“gridpts”.我导入的点与“readOGR”

> names(gridpts)
[1] "gpts"   "L_code" "Lake"   "Area"

字符串
我想通过“L_code”来划分点的子集,然后随机选择点。这是我到目前为止所做的:

acr2.pts    <- gridpts[gridpts$L_code == "acr2",]
sample.acr2 <- sample(nrow(acr2.grid), 690)


然而,这给了我一个带有gpts的向量,而不是我想要的点的子集。

uz75evzq

uz75evzq1#

我对你想要的输出做了一个假设。
我只使用mtcars数据集。此外,我使用tidyverse-包。

library(tidyverse)
df <- mtcars

n <- 3 # sample size; in your case 690

字符串
首先,我想在给定条件下对数据集进行子集化,并从这些子集中提取大小为n的样本:

idx_sample <- df %>% 
                filter(cyl == 6) %>%  # in your case: L_code == "acr2"
                count() %>%           # count the datasets after subsetting; 7 in my case
                unlist %>%            # convert the tibble in to a vector  
                seq(1,.) %>%          # create a sequence, equal to 1:7 in my case
                sample(., n)          # get some (2 in my case) random indices


idx_sample包含了我的样本数据集子集化后的索引。因此,

df %>%
  filter(cyl == 6) %>%                # subset again
  slice(idx_sample)                   # get the sampled data


给出了采样子集。

tp5buhyn

tp5buhyn2#

Spatialpoints空间点框架的工作方式与常规框架类似,您可以使用方括号对行和列进行子集化或选择,例如,[1:3,c(2,4,5)]表示列2,4,5的行1:3
在你已经正确地将你的spdf子集化到你想要的子组之后:

acr2.pts    <- gridpts[gridpts$L_code == "acr2",]

字符串
你需要用你的随机样本再做一次子集

sample.acr2 <- sample(nrow(acr2.pts), 690)


(do你想从原始的行数或从你的acr2子集中的行数中提取子集?)
这个向量现在包含随机的行号,所以你可以从子集中选择:

random_sub <- acr2.pts[sample.acr2,]


理论上,你也可以把样本函数放在那里,但这可能看起来很混乱:

random_sub <- acr2.pts[sample(nrow(acr2.pts), 690),]

相关问题