gpt4 book ai didi

r - 将 apply 与 Spatial*DataFrame 一起使用

转载 作者:行者123 更新时间:2023-12-02 03:42:50 25 4
gpt4 key购买 nike

假设我有以下 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 的“数据框”让我很烦。

谢谢。

最佳答案

您可以轻松地将 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')

关于r - 将 apply 与 Spatial*DataFrame 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19044931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com