假设我有以下SpatialPointsDataFrame
library(sp)
exdf <- data.frame(cbind(1:10, 41:50, 101:110))
names(exdf) <- c("id", "x", "y")
coordinates(exdf) <- c("x", "y")
我可以运行以下apply
apply(exdf@data, 1, function(x) {
cat(coordinates(exdf[exdf$id == x["id"],]), "\n")
})
然而,从函数中选择相同的数据框似乎很荒谬。我已经在迭代了。
请注意,在我的实际使用中,我需要将两个数据框行和坐标发送到另一个函数,因此仅apply
上的exdf@coords
是不是一种选择。
问题1:如果没有exdf[exdf$id == x["id"],]
部分,有没有办法做到这一点?
问题2:如果没有,是否有可以使用的包而不是sp
来执行此类任务。我主要需要sp
over
函数,并检查spatstat
并确定sp
更易于使用。然而,使用实际上不是data.frame
的“数据框架”让我很烦。
谢谢。
答案 0 :(得分:1)
您可以轻松地将SpatialPointsDataFrame转换为常规data.frame
,然后从那里继续:
> df <- as.data.frame(exdf)
> df
id x y
1 1 41 101
2 2 42 102
3 3 43 103
4 4 44 104
5 5 45 105
6 6 46 106
7 7 47 107
8 8 48 108
9 9 49 109
10 10 50 110
> paste(df$x, df$y, sep=' ')
[1] "41 101" "42 102" "43 103" "44 104" "45 105" "46 106" "47 107" "48 108" "49 109" "50 110"
编辑:根据评论,OP希望以更简单的方式实现结果,但不将Spatial * DataFrame转换为data.frame。使用以下代码可以实现与其示例中相同的结果,但如果还打印/连接/处理其他列,则需要更改它:
cat(paste(exdf@coords[,1], exdf@coords[,2]), sep='\n')