0

移動距離とその時点での値 (「強度」) の 2D プロットを作成する必要があります。

私のデータは次のようにフォーマットされています:

lon lat intensity

 1. -85.01478 37.99030  -68.3167
 2. -85.00752 37.97601  -68.0247
 3. -85.00027 37.96172  -67.9565
 4. -84.99302 37.94743  -67.8917

このように282行続きます。経度 (経度) と緯度 (緯度) の間の距離を計算するいくつかのパッケージ (地球圏など) を見ていましたが、データを必要な形式にする方法がわかりませんでした。度単位で移動した合計距離は 4.01538 で、282 ポイント間で等間隔であることはわかっていますが、これを念頭に置いて R で列を作成する方法がわかりません。

4

3 に答える 3

1

ここから、座標間の距離を計算するパッケージをいくつか見つけました。データが呼び出され、パッケージdtfを使用すると仮定します。RSEIS

dtf <- data.frame(rbind(c(-85.01478,37.99030,-68.3167),
c(-85.00752,37.97601,-68.0247),c(-85.00027,37.96172,-67.9565),
c(-84.99302,37.94743,-67.8917)))
names(dtf) <- c('lon','lat','int')

library(RSEIS)
travelint <- function(i,data){
ddeg <- GreatDist(dtf$lon[i],dtf$lat[i],dtf$lon[i+1],dtf$lat[i+1])$ddeg;
dint <- dtf$int[i+1] - dtf$int[i]; return(list(ddeg,dint))}
out <- sapply(1:(nrow(dtf)-1),data=dtf,travelint)
out <- data.frame(matrix(as.numeric(out),ncol=2,byrow=T))
out$X1 <- cumsum(out$X1)

これにより、データが取得され、ポイント間の移動距離とそれらの間の強度の変化が計算されます。その後、次のようにプロットできます。

ggplot(out,aes(X1,X2)) + geom_line() + 
      labs(x="Distance (Degrees)",y="Intensity Change")

ここに画像の説明を入力

代わりに強度を上げたい場合は、cumsum再度使用して強度の累積変化を取得し、それを最初の強度に追加できます。

out2 <- out
out2 <- rbind(c(0,0),out2)
out2$X2 <- cumsum(out2$X2) + dtf$int[1]
ggplot(out2,aes(X1,X2)) + geom_line() + 
      labs(x="Distance (Degrees)",y="Intensity")

ここに画像の説明を入力

于 2013-07-03T18:58:46.400 に答える
1
dfrm$dist<- cumsum(c(0, with(dfrm, sqrt( (lat[-1]-lat[-nrow(dfrm)])^2+
                                   (lon[-1]-lon[-nrow(dfrm)])^2
                               )))  )
with(dfrm, plot(dist, intensity, type="b"))

ここに画像の説明を入力

または、遅れた列の値を使用して、より「地理的な」距離測定を選択します。しかし、増分を考えると、単純な距離測定を使用した場合のエラーがそれほど大きくなる可能性があるとは思えません。

于 2013-07-03T18:53:41.053 に答える
0

DWinで述べたように、単純な測定または地理的距離測定を使用できます。ここでは、Imap パッケージの gdist 関数を使用して、Great-circle distance を計算しています。

library(Imap)
library(lattice)
#Dummy data
longlat <- read.table(text="lon lat intensity
 1. -85.01478 37.99030  -68.3167
 2. -85.00752 37.97601  -68.0247
 3. -85.00027 37.96172  -67.9565
 4. -84.99302 37.94743  -67.8917", header=TRUE)

ll <- lapply(seq(nrow(longlat)-1), function(x){
    start <- longlat[x,]
    end   <- longlat[x+1,]
    cbind(distance = gdist(start$lon, start$lat, end$lon, end$lat,units = "m"),
          intensity = end$intensity - start$intensity)
  })
dd <- as.data.frame(do.call(rbind,ll))
library(lattice)
xyplot(intensity~distance,dd,type= c('p','l'),pch=20,cex=2)

ここに画像の説明を入力

于 2013-07-03T19:13:09.053 に答える