我正在运行 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)),])
Run Code Online (Sandbox Code Playgroud)
接下来我计划使用这些数据运行随机森林。问题是,我有一个非常大的数据集(超过 40,000 个数据点)。我需要对我的数据进行子采样,但我很难弄清楚如何做到这一点。我试过使用 sample() 函数,但我认为因为我有一个 SpatialPointsDataFram 它不起作用?我是 R 的新手,非常感谢任何想法。
谢谢!
我确信有一个简单的答案,但我一直在寻找,我找不到任何关于此的东西.
我有一个数据框(sdata),其中一列名为" landcover"这是一个分类变量,但截至目前,每个土地覆盖类型都由一个数字表示.
我想用文本替换landcover数字代码,并且已经找到了如何部分地执行以下操作:
sdata$landcover<- as.factor(sdata$landcover)
levels(sdata$landcover) <- gsub("1", "w.subboreal", levels(sdata$landcover))
levels(sdata$landcover) <- gsub("2", "PICO", levels(sdata$landcover))
levels(sdata$landcover) <- gsub("3", "ABLA.PIEN", levels(sdata$landcover))
levels(sdata$landcover) <- gsub("5", "dry.forest", levels(sdata$landcover))
levels(sdata$landcover) <- gsub("10", "shrubby", levels(sdata$landcover))
levels(sdata$landcover) <- gsub("11", "agriculture", levels(sdata$landcover))
levels(sdata$landcover) <- gsub("13", "disturbed", levels(sdata$landcover))
Run Code Online (Sandbox Code Playgroud)
这适用于单位数字,但是,例如,数字13变为" w.subborealABLA.PIEN"(即1和3的组合),数字10变成" w.subboreal0"(1和0的组合).如何确保将两位数字视为一个数字,而不是要替换两个单独的单个数字?谢谢!