我是 R 新手,尤其是在空间数据方面。我试图找到一种方法将多个 (~600) 单波段光栅 (.tif) 文件有效地导入到 R 中,所有文件都存储在同一文件夹中。不确定这是否重要,但请注意,在我的 Mac 和 Windows Parallel VM 上的文件夹中查看时,每个 .tif = .TIF 都有以下五 (5) 种文件格式;.tfw; .TIF.aux.xml; .TIF.ovr; .TIF.xml。无论如何,以下代码(以及我尝试过的其他类似变体)似乎不起作用:
library(sp)
library(rgdal)
library(raster)
#path to where all .tif files are located
setwd("/path/to/workingdirectory")
#my attempt to create a list of my .tif files for lapply
temp = list.files(pattern="*.tif")
temp #returns 'character(0)'
#trying to use the raster function to read all .tif files
myfiles = lapply(temp, raster)
myfiles #returns 'list()'
Run Code Online (Sandbox Code Playgroud)
有没有办法使用某种形式的循环来有效地导入所有光栅文件?
我一直在寻找现有的 R 函数,用于聚合同一图层内共享公共边界的多边形要素(即,生成类似于 ArcGIS 中的“溶解边界”工具的输出)。
我使用 gdal_polygonizeR ( https://johnbaumgartner.wordpress.com/2012/07/26/getting-rasters-into-shape-from-r/ )从光栅文件创建了一个多边形图层。一些多边形形状由单个栅格单元分隔,因此在形状文件中存储为不同的特征。我想将此类多边形特征组合成单个多边形特征,并创建一个新的形状文件(减少多边形元素的总数),最好具有溶解的阈值距离。
有谁知道 R 中现有的方法可以做到这一点?
更新:我认为解决方案可能涉及aggregate,然后是disaggregate。我目前正在探索这一点,特别注意确保带有孔的多边形要素与父多边形保持关联(请参阅:分割单个 SpatialPolygons 对象的多边形部分)。如果/当我找到解决方案时将再次更新。
我想找到一种有效的方法来组合SpatialPolygonsDataFrame对象列表中的某些字符+数字列值.这是可重复的数据:
library(maptools) ## For wrld_simpl
library(sp)
## Example SpatialPolygonsDataFrames (SPDF)
data(wrld_simpl) #polygon of world countries
spdf1 <- wrld_simpl[1:25,] #country subset 1
spdf2 <- wrld_simpl[26:36,] #subset 2
spdf3 <- wrld_simpl[36:50,] #subset 3
#make list of SPDF objects
spdfl<-list()
spdfl[[1]]<-spdf1
spdfl[[2]]<-spdf2
spdfl[[3]]<-spdf3
#view data (attribute table) for one list element
spdfl[[1]]@data
Run Code Online (Sandbox Code Playgroud)
我想要做的是添加另一个列,它是FIPS,REGION和SUBREGION列的组合,用下划线('_')分隔.我知道如何添加+为列表中的每个SPDF对象添加一个新列,如下面的循环中所做,但我不知道如何获得所需的列行条目:
#add new 'unique.id' column to SPDF
for (i in 1:length(spdfl)){
spdfl[[i]]@data["unique.id"] = ""
}
Run Code Online (Sandbox Code Playgroud)
新unique.id列的行条目将采用以下格式:FIPS_REGION_SUBREGION.例如,对于spdfl [[1]]中的ATG面要素,我希望'unique.id'列有一个这样的条目:
unique.id
AC_19_29
Run Code Online (Sandbox Code Playgroud)
请告知如何对SPDF列表中的所有功能执行此操作.
我有很多(空间)data.frames 的列表。我想向每个 data.frame 添加一个列,该列的 ID 与列表索引 ID 等效(即,每个单独的 data.frame 的新列中的每一行都将具有相同的 ID)。
我想我必须将一些 apply 函数与 cbind 一起使用,但我不知道如何为列表中的每个元素(尤其是 Spatial data.frames 元素)格式化它。请帮忙!
这是一些可以使用的示例代码:
d1 <- data.frame(y1 = c(1, 2, 3), y2 = c(4, 5, 6))
d2 <- data.frame(y1 = c(3, 2, 1), y2 = c(6, 5, 4))
my.list <- list(d1, d2)
Run Code Online (Sandbox Code Playgroud)
我想最终得到以下结果:
[[1]]
y1 y2 unique.id
1 1 4 1
2 2 5 1
3 3 6 1
[[2]]
y1 y2 unique.id
1 3 6 2
2 2 5 2
3 1 4 …Run Code Online (Sandbox Code Playgroud)