合并数据框"而不是类data.frame"

时间:2016-02-01 11:51:02

标签: r sp

我使用了这本书"地理统计测绘实用指南"来自T. Hengl,它还提供code来重现结果。不幸的是,所包含的代码的加载已被弃用甚至不存在。我能够恢复大部分代码,但现在我仍然坚持看似简单的东西:合并两个数据帧。我的错误:

Error in (function (cl, name, valueClass)  :   ‘data’ is not a slot in class “data.frame”

这里是重现该错误的代码:

library(gstat)
library(rgdal)
library(sp)

# load the data:
data(meuse)
coordinates(meuse) <- ~x+y
proj4string(meuse) <- CRS("+init=epsg:28992")
download.file("http://spatial-analyst.net/book/system/files/meuse.zip", destfile=paste(getwd(), "meuse.zip", sep="/"))
grid.list <- c("ahn.asc", "dist.asc", "ffreq.asc", "soil.asc")
# unzip the maps in a loop:
for(j in grid.list){
  fname <- unzip("meuse.zip", file=j)
  print(fname)
  file.copy(fname, paste("./", j, sep=""), overwrite=FALSE)
}

# load grids to R:
meuse.grid <- readGDAL(grid.list[1])
# fix the layer name:
names(meuse.grid)[1] <- sub(".asc", "", grid.list[1])
for(i in grid.list[-1]) {
  meuse.grid@data[sub(".asc", "", i[1])] <- readGDAL(paste(i))$band1
}
names(meuse.grid)
proj4string(meuse.grid) <- CRS("+init=epsg:28992")

meuse.ov <- over(meuse, meuse.grid)
str(meuse.ov)
meuse.data <- meuse[c("zinc", "lime")]@data
str(meuse.data)
meuse.ov@data <- merge(meuse.ov, meuse.data)

这实在令人困惑,因为两个数据框(meuse.ov和meuse.data)的结构看起来都相同:

> str(meuse.ov)
'data.frame':   155 obs. of  4 variables:
 $ ahn  : int  3214 3402 3277 3563 3406 3355 3428 3476 3522 3525 ...
 $ dist : num  0.00136 0.01222 0.10303 0.19009 0.27709 ...
 $ ffreq: int  1 1 1 1 1 1 1 1 1 1 ...
 $ soil : int  1 1 1 2 2 2 2 1 1 2 ...

> str(meuse.data)
'data.frame':   155 obs. of  2 variables:
 $ zinc: num  1022 1141 640 257 269 ...
 $ lime: Factor w/ 2 levels "0","1": 2 2 2 1 1 1 1 1 1 1 ...

我尝试通过在stackoverflow上查找来解决这个问题,但没有任何工作。书中的(不可工作的)遗留代码表明了这一点(可能是您的理解):

meuse.ov <- overlay(meuse.grid, meuse)
meuse.ov@data <- cbind(meuse.ov@data, meuse[c("zinc", "lime")]@data)

0 个答案:

没有答案