簡體   English   中英

來自空間點數據幀的子集隨機點

[英]Subset random points from spatial points data frame

我需要從我在 ArcGIS 中創建的網格中的 R 中的 select 隨機點。 我對此有點陌生,所以我不熟悉代碼。

我有一個包含 160831 個元素(點)的大型 SpatialPointsDataFrame,名為“gridpts”。 我用“readOGR”導入了點

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

我想通過“L_code”對點進行子集化,然后是 select 隨機點。 這是我到目前為止所擁有的:

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

但是,這給了我一個帶有 gpts 的向量,而不是我想要的點的子集。

謝謝你。

嗨,妮可,歡迎來到 Stack Overflow。 請花點時間查看https://stackoverflow.com/help/how-to-ask以獲取提示。 提供一些數據是一個好的開始,制作如何制作出色的 R 可重現示例並給出您想要的 output 的示例。

關於您的問題,我假設您想要的 output。 如果我的回答不能幫助您解決問題,我會刪除它。

由於您沒有提供任何數據,我只使用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包含子集后我的數據集樣本的 indizes。 所以

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

給我們采樣的子集。

正如馬丁已經提到的那樣,如果沒有一個有效的例子來幫助你並不容易。 但是我想我理解你想要做什么,因為我從類似的問題開始:

Spatialpointsdataframes 像常規數據幀一樣工作,您可以子集或 select 帶有方括號的行和列,例如 [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) (您想從原始行數還是從 acr2 子集中的行數中進行子集化?)

這個向量現在包含隨機行號,所以你可以從子集中 select :

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

從理論上講,您也可以將樣本 function 放在那里,但這可能看起來很混亂:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM