如何从 R 中的 shapefile 中提取特征样本?

How do I take a sample of features from a shapefile in R?

我有一个包含数千个特征(称为 x)的 shapefile。我只想要这些功能的 10%。我怎样才能对这些特征进行随机抽样?我试过:

    final_x <- sample(x,nrow(x)/10) 

但这returns是一个错误。

我也试过:

    x_samp <- sample(x_samp$OBJECTID,nrow(x)/10)
    x_samp <- as.data.frame(x_samp)
    final_x <- x[x$OBJECTID==x_samp$x_samp]

我已经通过以下方式获得了我想要的东西:

    x_samp <- sample(x$OBJECTID,nrow(x)/10)
    for (i in x_samp) {
    x1 <- x[x$OBJECTID==i,]
    final_x <- rbind(x,x1)
    }
     

上面只是感觉有点笨拙,不太优雅。有更好的解决方案吗?

非常感谢

将您的 shapefile 读取为 sf 对象,然后您可以使用括号子集。

library(sf)

set.seed(432)
# reading example nc data as sf
my_sf <- read_sf(system.file('shape/nc.shp', package = 'sf'))
nrow(my_sf)
#> [1] 100

my_sf_sampled <- my_sf[sample(nrow(my_sf), size = nrow(my_sf)/10), ]
nrow(my_sf_sampled)
#> [1] 10

reprex package (v1.0.0)

于 2021 年 2 月 26 日创建

或者,使用 dplyr::sample_frac:

library(dplyr)
library(sf)

my_sf <- read_sf(system.file('shape/nc.shp', package = 'sf'))
sample_frac(my_sf, .1)

#> Simple feature collection with 10 features and 14 fields
#> geometry type:  MULTIPOLYGON
#> dimension:      XY
#> bbox:           xmin: -81.9856 ymin: 34.82742 xmax: -76.02605 ymax: 36.54606
#> geographic CRS: NAD27
#> # A tibble: 10 x 15
#>     AREA PERIMETER CNTY_ CNTY_ID NAME  FIPS  FIPSNO CRESS_ID BIR74 SID74 NWBIR74
#>  * <dbl>     <dbl> <dbl>   <dbl> <chr> <chr>  <dbl>    <int> <dbl> <dbl>   <dbl>
#>  1 0.104      1.55  2065    2065 Leno… 37107  37107       54  3589    10    1826
#>  2 0.154      1.68  2030    2030 Harn… 37085  37085       43  3776     6    1051
#>  3 0.172      1.84  2090    2090 Cumb… 37051  37051       26 20366    38    7043
#>  4 0.098      1.26  2097    2097 Hoke  37093  37093       47  1494     7     987
#>  5 0.078      1.38  2034    2034 Linc… 37109  37109       55  2216     8     302
#>  6 0.109      1.32  1841    1841 Pers… 37145  37145       73  1556     4     613
#>  7 0.18       2.14  1973    1973 Chat… 37037  37037       19  1646     2     591
#>  8 0.044      1.16  1887    1887 Chow… 37041  37041       21   751     1     368
#>  9 0.134      1.76  1958    1958 Burke 37023  37023       12  3573     5     326
#> 10 0.099      1.41  1963    1963 Tyrr… 37177  37177       89   248     0     116
#> # … with 4 more variables: BIR79 <dbl>, SID79 <dbl>, NWBIR79 <dbl>,
#> #   geometry <MULTIPOLYGON [°]>

reprex package (v1.0.0)

于 2021 年 2 月 26 日创建