我目前正在尝试将北卡罗来纳州的所有邮政编码映射到传单地图上。最终,我想用来自另一个数据集的值对这些进行颜色编码。
虽然我已经设法用这些值将标记放在地图上,但以带有邮政编码的彩色方式这样做确实会为我的项目增加价值。
我在 R 中下载了 USAboundaries 库,因此我认为我有足够的数据在传单中创建多边形,但数据不是 SpatialPointsDataFrame 格式。
USAboundaries 数据集的示例输出如下所示:
USAboundaries::us_zipcodes()
Simple feature collection with 33144 features and 6 fields
geometry type: POINT
dimension: XY
bbox:
xmin: -176.6316
ymin: -14.22075
xmax: 145.7536
ymax: 71.2738
epsg (SRID): 4326
proj4string: +proj=longlat +datum=WGS84 +no_defs
First 10 features:
zipcode zcta5ce10 affgeoid10 geoid10 aland10 awater10 geometry
21914 21914 8600000US21914 21914 1924479 477175 POINT (-75.98187 39.57303)
01001 01001 8600000US01001 01001 29731610 2118827 POINT (-72.62585 42.06258)
34736 34736 8600000US34736 34736 322808220 78588518 POINT (-81.89624 28.55458)
46151 …Run Code Online (Sandbox Code Playgroud) 我想将多边形数据和栅格数据合并到一个数据帧中,然后使用R中的randomForests包.
这包括首先提取每个多边形的平均栅格值.
到目前为止,我有以下内容:
#load libraries
library(raster)
library(rgdal)
library(sp)
library(maptools)
#import raster data
r <- raster("myRasterdata.tif")
#import polygon data
p <- readShapePoly("myPolydata.shp")
#extract mean raster value for each polygon
ExtractMyData <- extract(r, p, small=TRUE, fun=mean, na.rm=TRUE, df=FALSE, nl=1, sp=TRUE)
# note I have also tried this with df=TRUE and sp=FALSE
Run Code Online (Sandbox Code Playgroud)
输出是一个矩阵,我可以写入数据帧.但它没有空间坐标或原始多边形ID,所以我不知道如何将输出连接到同一个数据库.我认为sp = TRUE参数会这样做,但它似乎不起作用.
请注意,为了RandomForests的目的,我实际上必须将多边形转换为点(使用质心方法?),所以我猜猜我真正想要的是加入连接到点而不是多边形的平均栅格值.
任何建议将不胜感激.谢谢!!
我有不同位置(X1,X2,...)的温度数据的每日平均值,我想用它们插入地图.我通过从格式化的Excel工作表加载它们来创建长格式数据对象,例如:
library(reshape2)
tempdata <- read.csv("...", sep=";")
names(tempdata) <- c("date", paste("X", 1:73))
head(tempdata)
# date X1 X2 X3 X4 X5 X6 X7
# 1 1 7.3 6.6 6.7 5.8 6.1 6.1 5.5
# 2 2 7.5 6.6 6.6 5.6 4.8 4.7 3.9
# 3 3 8.8 7.7 7.6 7.0 7.0 6.0 5.8
# 4 4 8.5 7.4 7.5 7.0 7.3 5.9 5.5
# 5 5 7.7 6.7 6.9 6.1 6.8 5.1 4.1
# 6 6 7.5 6.7 6.8 6.0 6.4 5.0 …Run Code Online (Sandbox Code Playgroud) 是否有可能以某种方式轻松处理Spatial*DataFrame(*=点,线,多边形,像素,网格......)中的数据?特别是我在为它分配值和使用它们时遇到了困难:
require(gstat)
data(meuse)
coordinates(meuse) = ~x+y
data(meuse.grid)
gridded(meuse.grid) = ~x+y
######## 1) assigning value
meuse[1,'zinc'] <- NA
# Error in meuse[1, "zinc"] <- NA : object of type 'S4' is not subsettable
as.data.frame(meuse)[1,'zinc'] <- NA
# Error in as.data.frame(meuse)[1, "zinc"] <- NA :
# could not find function "as.data.frame<-"
######## 2) operating with values
meuse[, 'zinc'] + 2
# Error in meuse[, "zinc"] + 2 : non-numeric argument to binary operator
Run Code Online (Sandbox Code Playgroud)
我发现这两种情况都有相当难看的变通办法:
# ad 1)
meuse2 <- as.data.frame(meuse) …Run Code Online (Sandbox Code Playgroud) 我想找到一种有效的方法来组合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列表中的所有功能执行此操作.