R 轻松分配和使用Spatial*数据帧的数据值
是否可以以某种方式轻松处理R 轻松分配和使用Spatial*数据帧的数据值,r,spatial,gstat,spatial-data-frame,R,Spatial,Gstat,Spatial Data Frame,是否可以以某种方式轻松处理空间*数据框中的数据(*=点、线、多边形、像素、网格等)?特别是,我在给它赋值和使用它们时遇到困难: 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"] <-
空间*数据框中的数据(*=点、线、多边形、像素、网格等)?特别是,我在给它赋值和使用它们时遇到困难:
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
require(gstat)
数据(meuse)
坐标(meuse)=~x+y
数据(meuse.grid)
网格化(meuse.grid)=~x+y
########1)赋值
meuse[1,'zing']对于Spatial*DataFrame对象,您可以使用'@data'访问data.frame插槽,并且通常的data.frame操作应该可以工作。以你为例,
meuse@data[1, 'zinc'] <- NA
您可以这样做:
meuse$zinc[1] <- NA
如果可以的话,最好避免使用@operator,因为开发人员可以隐藏在他们提供给用户的代码中,也就是说,如果不使用提供的方法,它会破坏他们的API。它没有什么大的危险,除了开发人员可能会更改API,而您的代码将无法工作,并且您可能会通过修改对象的设计方式中的一个部分而不是另一个部分来损坏对象,因此您不应该使用它,除非是私下使用或在您积极维护的代码中使用(我认为在这种情况下是安全的,但如果可以的话,一般避免使用)。请参阅“@”和“slot”了解基本信息。meuse$ZINK[1]这也很有效,因此您可以避免使用$:meuse[['ZINK']][1]@mdsumner,哇,这么多的可能性!但是你怎么说@
操作符,我为什么要避免它呢?这不仅有趣,而且似乎很重要;请将它作为你自己的答案发布!这是因为开发人员隐藏在他们提供给用户的代码中,也就是说,如果你不使用提供的方法,它会破坏API。这没有什么危险,只是开发人员可能会更改API,而您的代码将无法工作(我认为在这种情况下是安全的,但如果可以的话,一般避免使用它。Spatial*类应该在这里提供更多帮助,这可能是因为DataFrame部分最初是单独实现的,在扩展R中的实际data.frame之前,我想是很长的一段时间)。谢谢!1)因此,您认为这3条语句不起作用是一个缺陷?有人能修复它吗?2)是否在某处记录了Spatial*DataFrame
的@data
功能?人们可以将此作为使用它是否合理的标准。似乎他们也使用了df[['zine']][1]
。我不喜欢这些更“正确”的方式,因为这不是我通常使用data.frames的方式。df@data[1,'锌']
与我通常使用的非常接近。更重要的是,使用@data
可以将其作为一个数据框架使用—按名称或索引索引多个列:meuse@data[,c('zing','cd')]
不幸的是,在meuse[[]]
表单中,这项功能不起作用。现在,meuse[1,'zing']
str(meuse@data)
'data.frame': 155 obs. of 12 variables:
$ cadmium: num 11.7 8.6 6.5 2.6 2.8 3 3.2 2.8 2.4 1.6 ...
$ copper : num 85 81 68 81 48 61 31 29 37 24 ...
$ lead : num 299 277 199 116 117 137 132 150 133 80 ...
$ zinc : num NA 1141 640 257 269 ...
...
meuse$zinc[1] <- NA
aname <- 'zinc'
meuse[[aname]][1] <- NA
meuse[1,'zinc'] <- NA
meuse[1,][['zinc']] <- NA
meuse[1,]$zinc <- NA