2017-03-06 7 views
0

私は動物追跡プロジェクトを行っています。 「finaltrimmed」私のデータは、私は基本的に時間をかけてどのように個々の昆虫の動きを追跡し、それぞれ独自のTrackIndex、の行を作成したいこのポイント座標からSpatialLinesDataFrameを作成する

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に基づいて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を作成することができませんでした。

私の考えは、データフレームを「スプリット」機能で「最後にトリミング」することです。 1246 347.0 316 214 1 2:私は次のようなデータ構造 $ 1 TrackIndex時間X_POSITIONのY_POSITIONのnewIndexが 1与え

splitfinal<-split(finaltrimmed,finaltrimmed$TrackIndex) 

1246 347.0 316 214 2 を...... 57:1246 348.9 325 201 57 58:1246 349.0 330 201 58 TrackIndex時間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 そこから、Iはxとyの位置をCBINDでき"splitfinal"(この手順は、 "splitfinal"がリストのリストであるために機能しませんでした)。 SpatialLinesDataFrameを作成するために必要なLinesクラスの作成方法もわかりません。

私は何日も立ち往生しており、道を見出すことができませんでした。

誰でも手助けできますか?ここで

+0

はそれを自分自身を使用していないが、これは仕事ができる:https://でrpubs.com/walkerke/points_to_line – lbusett

答えて

0

は動作するはずアプローチです:

例データ:

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) 
関連する問題