如何在 R 中对 SpatialPointsDataFrame 进行子采样

Posted

技术标签:

【中文标题】如何在 R 中对 SpatialPointsDataFrame 进行子采样【英文标题】:How can I subsample a SpatialPointsDataFrame in R 【发布时间】:2014-02-24 15:56:55 【问题描述】:

我正在运行 RandomForest。我已经导入了表示已使用和未使用站点的点数据,并从栅格 GIS 图层创建了栅格堆栈。我创建了一个 SpatialPointDataFrame,其中包含所有已使用和未使用的点,并附加了它们的基础栅格值。

require(sp)
require(rgdal)
require(raster)

#my raster stack
xvariables <- stack(rlist)  #rlist = a list of raster layers   

# Reading in the spatial used and unused points.
ldata <- readOGR(dsn=paste(path, "DATA", sep="/"), layer=used_avail)
str(Ldata@data)


#Attach raster values to point data.
v <- as.data.frame(extract(xvariables, ldata))
ldata@data = data.frame(ldata@data, v[match(rownames(ldata@data), rownames(v)),])

接下来我计划使用这些数据运行随机森林。问题是,我有一个非常大的数据集(超过 40,000 个数据点)。我需要对我的数据进行子采样,但我很难弄清楚如何做到这一点。我试过使用 sample() 函数,但我认为因为我有一个 SpatialPointsDataFram 它不会工作?我是 R 新手,非常感谢任何想法。

谢谢!

【问题讨论】:

【参考方案1】:

为 Spatial*DataFrame 对象设置子集相当简单;只需使用

spSubset <- spObject[<sample_criterion>,]

这是一个示例,我们加载了新泽西州的所有大学,然后随机抽取 size=20 的样本。还有一个示例,我们加载美国所有州并仅抓取“新泽西州”。

library(rgdal)
set.seed(1)
# random sample of NJ colleges...
sampleSize=20
spPoints <- readOGR(dsn=".",layer="NJ_College_Univ_NAD83njsp")
spSample <- spPoints[sample(1:length(spPoints),sampleSize),]

# extract NJ from US States TIGER/Line file
states   <- readOGR(dsn=".",layer="tl_2013_us_state")
NJ       <- states[states$NAME=="New Jersey",]
NJ       <- spTransform(NJ,CRS=CRS(proj4string(spSample)))

# render the map
NJ.df    <- fortify(NJ)
library(ggplot2)
ggplot() +
  geom_path(data=NJ.df, aes(x=long,y=lat, group=group))+
  geom_point(data=as.data.frame(coordinates(spPoints)), 
             aes(x=coords.x1,y=coords.x2),colour="blue", size=3)+
  geom_point(data=as.data.frame(coordinates(spSample)), 
             aes(x=coords.x1,y=coords.x2),colour="red", size=3)+
  coord_fixed() + labs(x="", y="") + theme(axis.text=element_blank())

美国各州的TIGER/Line文件可以在here找到。 NJ 学院 shapefile 为 here。

【讨论】:

通过 cmets 进行这项工作不太可能有成效。为了重现您的问题,我需要 rlistDATA shapefile。请记住,“shapefile”实际上是文件的集合(例如,DATA.dbf、DATA.prj、DATA.shp 等),您可以将这些文件上传到某处并提供链接吗?

以上是关于如何在 R 中对 SpatialPointsDataFrame 进行子采样的主要内容,如果未能解决你的问题,请参考以下文章

如何在 R 中对财务数据 xts 对象进行简单和滚动线性回归?

如何在 R Shiny 中对数据帧进行条件格式设置?

如何通过在R语言中对相同的变量进行分组来将行合并为单列

如何使用 row.names 属性在 R 中对数据框的行进行排序?

如何在 R 中对给定固定簇大小的 lat-long 进行聚类?

如何在 R Shiny 中对使用反应数据框呈现的数据表执行计算?