R 使用行数据的spplot()晶格图

R 使用行数据的spplot()晶格图,r,graphics,rgdal,R,Graphics,Rgdal,当数据按行排列时,我如何使用spplot()创建晶格图,例如,每个地区都有更多的值(我有失业率unemp多年(year),这些地区CSO\u NAME) 这是我加载地图和合并数据的代码: library(rgdal) library(sqldf) # Import map and assign data.shape@data to spdata data.shape<-readOGR(dsn="folder",layer="mylayer") spdata <- data.

当数据按行排列时,我如何使用spplot()创建晶格图,例如,每个地区都有更多的值(我有失业率
unemp
多年(
year
),这些地区
CSO\u NAME)

这是我加载地图和合并数据的代码:

library(rgdal)
library(sqldf)

# Import map and assign data.shape@data to spdata
data.shape<-readOGR(dsn="folder",layer="mylayer")    
spdata <- data.shape@data

# Load statistics data
unemp <- read.csv("cso_unemployment_rwise.csv")

# Merge data with spdata
spdata <- sqldf("select sp.*, cu.year, cu.unemp from spdata sp join unemp cu on (sp.nazok_a = cu.CSO_NAME) ")

# Build new spdata
spdata_merged <- SpatialPolygonsDataFrame(data.shape, spdata) 
# This fails: length(Sr@polygons) == nrow(data) is not TRUE
但是因为我不能将数据与多边形合并,我不知道下一步该怎么做。在这种情况下,我可以轻松地转置数据,然后使用以下方法:

spplot(spdata,c("y2009","y2010","y2011","y2012",...))
可复制示例

这里是样本数据,
stats\u data
只有一个分组变量
year
stats\u data2
有两个分组变量
year
sex

# Get map
con <- url("http://gadm.org/data/rda/CZE_adm2.RData")
print(load(con))
close(con)
gadm_data <- gadm@data

# Create sample Data
stats_data <-
  data.frame(

      as.character(rep(gadm_data$NAME_2,3)),
      as.numeric(round(runif(3*length(gadm_data$NAME_2), 0, 1),digits=3)*100),
      as.factor(rep(c(2010,2011,2012),length(gadm_data$NAME_2)))
  )
names(stats_data) <- c("NAME_2","UNEMPR","YEAR") # str(stats_data)

# Add each year to map data
library("sqldf")
gadm_data <- sqldf("select gd.*, sd.UNEMPR as u2010 from gadm_data gd join stats_data sd using (NAME_2) where year = 2010")
gadm_data <- sqldf("select gd.*, sd.UNEMPR as u2011 from gadm_data gd join stats_data sd using (NAME_2) where year = 2011")
gadm_data <- sqldf("select gd.*, sd.UNEMPR as u2012 from gadm_data gd join stats_data sd using (NAME_2) where year = 2012")
gadm@data <- gadm_data

# Plot     
spplot(gadm,c("u2010","u2011","u2012"),at=c(0,10,20,30,40,50,70,100))

# Create sample Data, two factor variables
stats_data2 <-
  data.frame(

    as.character(rep(gadm_data$NAME_2,6)),
    as.numeric(round(runif(6*length(gadm_data$NAME_2), 0, 1),digits=3)*100),
    as.factor(rep(c(2010,2011,2012),2*length(gadm_data$NAME_2))),
    as.factor(c("f","m"))
  )
names(stats_data2) <- c("NAME_2","UNEMPR","YEAR","SEX") # str(stats_data2)
#获取地图

con每个多边形应该有一行数据。如果没有玩具示例,很难重写代码。总是试着提出问题@SimonO101我已经添加了一个容易重复的例子来说明即使只有一个因子变量的代码是多么丑陋。太棒了!等我有机会看一下我是否能帮助你,现在你有了一个可复制的例子,我相信其他人也会看到他们是否能帮助你。
# Get map
con <- url("http://gadm.org/data/rda/CZE_adm2.RData")
print(load(con))
close(con)
gadm_data <- gadm@data

# Create sample Data
stats_data <-
  data.frame(

      as.character(rep(gadm_data$NAME_2,3)),
      as.numeric(round(runif(3*length(gadm_data$NAME_2), 0, 1),digits=3)*100),
      as.factor(rep(c(2010,2011,2012),length(gadm_data$NAME_2)))
  )
names(stats_data) <- c("NAME_2","UNEMPR","YEAR") # str(stats_data)

# Add each year to map data
library("sqldf")
gadm_data <- sqldf("select gd.*, sd.UNEMPR as u2010 from gadm_data gd join stats_data sd using (NAME_2) where year = 2010")
gadm_data <- sqldf("select gd.*, sd.UNEMPR as u2011 from gadm_data gd join stats_data sd using (NAME_2) where year = 2011")
gadm_data <- sqldf("select gd.*, sd.UNEMPR as u2012 from gadm_data gd join stats_data sd using (NAME_2) where year = 2012")
gadm@data <- gadm_data

# Plot     
spplot(gadm,c("u2010","u2011","u2012"),at=c(0,10,20,30,40,50,70,100))

# Create sample Data, two factor variables
stats_data2 <-
  data.frame(

    as.character(rep(gadm_data$NAME_2,6)),
    as.numeric(round(runif(6*length(gadm_data$NAME_2), 0, 1),digits=3)*100),
    as.factor(rep(c(2010,2011,2012),2*length(gadm_data$NAME_2))),
    as.factor(c("f","m"))
  )
names(stats_data2) <- c("NAME_2","UNEMPR","YEAR","SEX") # str(stats_data2)