後方流跡線をRで描いてみる
オフラインで得た後方流跡線のテキストデータ。
様々な処理をRにまとめたくて
Rで描くことに挑戦。
で、まず最初に戸惑ったのがデータの読み込み。
今まではExcelで読み込んでいたから問題なかったけど
Rで行ごとに項目数が異なるデータを読み込むことが
簡単ではなかったので、その覚書。
つまりは、read.tabel()では、読み込めませんでした。
なので、readLines()で読み込みます。
ただし、これだと1行が一つの文字列として読み込まれるので
それぞれの数字を、ばらばらにしないといけない。
そこで使ったのがunlist(strsplit(data[i]," "))
空白を区切りとして、それぞれの行を個別の文字に認識。
しかし、ここでまた問題が。
なんと、各文字間の空白の数が、ばらばらだったのです。
つまり、
1□□□□□1
1□□□□ - 1
1□□□ 1 2 5
のように、後ろの数が大きくなると間の空白の数が変わるのです。
(なんて気の利いた設定だこと・・・・・・)
そうなると、空白を区切り文字にすると
各要素へのアクセスをするときに
ある行は、目的の数字がdata[48]だったとしても
別の行では、同じ緯度なりがdata[59]だったりするわけで
目的の要素にアクセスできるとは、限らなくなるわけで。
行ごとに、指定する数が変わってきてしまう!
なんとか空白の要素だけを取り除きたいけどis.na()とかを使っても
空白はチェックを通ってしまう。
なので一工夫。
要素を数字に変換して、1で割ってやると
数字はそのまま、空白はNAになるのですよ!!
で、このNAを除けば、数字だけが残るという仕組み。
つまり、後方流跡線のファイルをsampldata.txtとすると
data <- readLines("sampledata.txt")
i <- 11 #これは一例。目的の行数を入れる
lat <- na.omit(as.numeric(unlist(strsplit(data[11]," ")))/1)[9]
lon <-na.omit(as.numeric(unlist(strsplit(data[11]," ")))/1)[10]
height <- na.omit(as.numeric(unlist(strsplit(data[11]," ")))/1)[11]
data2 <- c(lat, lon, height)
これで、緯度・経度・高度のベクトルが得られるね!