3

假设我有以下 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发送到另一个函数,因此仅在 ing 上exdf@coords不是一个选项。

问题1:有没有办法做到这一点exdf[exdf$id == x["id"],]

问题 2:如果没有,是否有我可以用来代替sp此类任务的包。我主要需要sp它的over功能,并检查spatstat并决定sp使用更简单。然而,使用实际上并不data.frame让我烦恼的“数据框”。

谢谢你。

4

1 回答 1

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')
于 2013-09-27T07:52:22.287 回答