我正在运行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的新手,非常感谢任何想法。
谢谢!
答案 0 :(得分:2)
设置Spatial * DataFrame对象非常简单;只需使用
spSubset <- spObject[<sample_criterion>,]
这是我们加载新泽西州所有学院的例子,然后抓取一个大小= 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())