【问题标题】:Create SpatialLinesDataFrame from point coordinates从点坐标创建 SpatialLinesDataFrame
【发布时间】:2017-07-25 22:44:35
【问题描述】:

我正在做一个动物追踪项目。我的数据“finaltrimmed”看起来像这样

  TrackIndex     Time x_position y_position
1             1   0.1034        425        171
2             1   0.1379        425        169
3             1   0.1724        427        166
.........
125          25   1.1030        462        397
126          25   1.1380        462        397
127          25   1.1720        462        397
128          25   1.2070        462        397
129          25   1.2410        461        398
130          25   1.2760        462        399
131          25   1.3100        461        399
132          25   1.3450        461        399
133          25   1.3790        460        399
134          25   1.4140        460        399
.....
268          41   1.8280        302        280
269          41   1.8620        303        279
270          41   1.8970        302        280
271          41   1.9310        302        280
272          41   1.9660        302        281
273          41   2.0000        302        281
274          41   2.0340        302        281
275          41   2.0690        302        282
276          41   2.1030        302        282
277          41   2.1380        302        282
278          41   2.1720        302        283
........

我希望为每个唯一的 TrackIndex 创建一条线,它基本上跟踪每个昆虫随时间的移动情况。从那里我想创建一个基于 TrackIndex 的 SpatialLinesDataFrame。最后,我想使用“adehabitatMA”包中的“buffer”功能在每一行周围创建一个缓冲区。

我能够使用以下命令创建 SpatialPointsDataFrame。

xy<-cbind(finaltrimmed$x_position,finaltrimmed$y_position)
MatrixofPoints<-matrix(xy,ncol=2)
points<-SpatialPoints(MatrixofPoints) 
dataframe=data.frame(finaltrimmed$TrackIndex)
df.points<-SpatialPointsDataFrame(points,dataframe)

但是,我无法以类似的方式创建 SpatialLinesDataFrame。

我的想法是首先使用“拆分”功能拆分“最终修剪”的数据框。

splitfinal<-split(finaltrimmed,finaltrimmed$TrackIndex)

这给了我以下数据结构 $1 TrackIndex 时间 x_position y_position newindex 1:1246 347.0 316 214 1 2:1246 347.0 316 214 2 …… 57:1246 348.9 325 201 57 58: 1246 349.0 330 201 58 TrackIndex Time x_position y_position newindex

$25 TrackIndex 时间 x_position y_position newindex 1:1318 363.6 375 422 1 2:1318 363.7 375 422 2 ...... 57: 1318 365.6 399 406 57 58: 1318 365.6 400 406 58 从那里,我可以在“splitfinal”中绑定 x 和 y 位置(这一步没有成功,因为“splitfinal”是一个列表列表)。我也不确定如何创建创建 SpatialLinesDataFrame 所需的 Lines 类。

我被困了很多天,想不出办法。

谁能帮忙?

【问题讨论】:

标签: r sp


【解决方案1】:

这是一种应该可行的方法:

示例数据:

finaltrimmed <- read.table(text="TrackIndex  Time x_position y_position
1    1   0.1034  425  171
2    1   0.1379  425  169
3    1   0.1724  427  166
130 25   1.2760  462  399
131 25   1.3100  461  399
132 25   1.3450  461  399
133 25   1.3790  460  399
134 25   1.4140  460  399
274 41   2.0340  302  281
275 41   2.0690  302  282
276 41   2.1030  302  282
277 41   2.1380  302  282
278 41   2.1720  302  283")

解决方案:

library(raster)
ft <- split(finaltrimmed, finaltrimmed$TrackIndex)

z <- lapply(ft, function(i) spLines(as.matrix(i[, c('x_position', 'y_position')]), attr=data.frame(TrackIndex=i$TrackIndex[1])))
names(z) <- NULL
zz <- do.call(bind, z)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-20
    相关资源
    最近更新 更多