我需要将 R data.frame 对象转换为 SpatialPointsDataFrame 对象,以便对数据运行空间统计功能。但是,由于某种原因,将 data.frame 对象转换为 SpatialPointsDataFrame 在转换后的对象上运行特定函数时会出现意外行为。
在此示例中,我尝试在生成的 SpatialPointsDataFrame 上运行 head() 函数 为什么函数 head() 在某些 SpatialPointsDataFrame 对象上失败?
这是重现该行为的代码。
示例1,没有错误:
#beginning of r code
#load S Classes and Methods for Spatial Data package "sp"
library(sp)
#Load an example dataset that contain geographic ccoordinates
data(meuse)
#check the structure of the data, it is a data.frame
str(meuse)
#>'data.frame': 155 obs. of 14 variables: ...
#with coordinates x,y
#Convert the data into a SpatialPointsDataFrame, by function coordinates()
coordinates(meuse) <- c("x", "y")
#check structure, seems ok
str(meuse)
#Check first rows of the data
head(meuse)
#It worked!
#Now create a small own dataset
testgeo <- as.data.frame(cbind(1:10,1:10,1:10))
#set colnames
colnames(testgeo) <- c("x", "y", "myvariable")
#convert to SpatialPointsDataFrame
coordinates(testgeo) <- c("x", "y")
#Seems ok
str(testgeo)
#But try running for instance head()
head(testgeo)
#Resulting output: Error in `[.data.frame`(x@data, i, j, ..., drop = FALSE) :
#undefined columns selected
#end of example code
我不理解的两个示例数据集之间存在一些差异。函数 str() 不显示区别?
为什么函数 head() 在数据集 testgeo 上失败?
为什么添加更多列时 head() 起作用,10 似乎是限制:
testgeo <- as.data.frame(cbind(1:10,1:10,1:10,1:10,1:10,1:10,1:10,1:10))
coordinates(testgeo) <- c("V1", "V2")
head(testgeo)