首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用apply与apply*DataFrame

使用apply与apply*DataFrame
EN

Stack Overflow用户
提问于 2013-09-27 07:18:35
回答 1查看 1.3K关注 0票数 3

假设我有以下SpatialPointsDataFrame

代码语言:javascript
运行
复制
library(sp)
exdf <- data.frame(cbind(1:10, 41:50, 101:110))
names(exdf) <- c("id", "x", "y")
coordinates(exdf) <- c("x", "y")

我可以运行以下apply

代码语言:javascript
运行
复制
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。我主要需要spover函数,同时也检查spatstat,并认为sp更易于使用。然而,使用“数据框架”--这实际上不是一个data.frame --会让我感到烦恼。

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2013-09-27 07:52:22

您可以轻松地将您的SpatialPointsDataFrame转换为常规的data.frame,然后从那里开始:

代码语言:javascript
运行
复制
> 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。可以使用以下代码实现与他的示例中相同的结果,但如果还要打印/连接/处理其他列,则需要对其进行更改:

代码语言:javascript
运行
复制
cat(paste(exdf@coords[,1], exdf@coords[,2]), sep='\n')
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19044931

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档