2016-10-14 13 views
0

私はスキャンで読まなければならない観測から、本当にばかげた出力フォーマットを聞いています。問題があるR:スキャンの出力の日付形式を照会する方法は?

06.02.2014 # header 
PNP   
-0,005 
00:05#587  # values 
00:15#591 
23:50#587 
23:55#587 
07.02.2014 # header 
PNP 
-0,005 
00:10#587  # values 
00:15#590 
23:55#590 
24:00#593 
08.02.2014 # header 
PNP 
-0,005 
00:05#590  # value 
00:10#595 
00:15#600 
23:50#600 
23:55#607 

  • 私は数年の日付を持っている。ここ

    は、私は、ヘッダとデータブロックをマークした(DATA.DAT)からsnipplet、です

  • 毎日日付と2つの追加エントリで始まる独自のヘッダー(固定長)
  • 各daの時系列の長さ(形式HH:MM#値) yは一定ではなく、データギャップが存在する(例には示されていない)

私の目標は、日付、時刻、値の形式のdata.frameです。

このように、単一のリスト要素(scan(file = data.dat、what = "")の出力を文字として出力)を解析するループなどが必要です。時間ブロックの長さが異なるため、日付から始まる日次データをサブセット化し、いくつかのヘッダー要素をスキップし、リストのtime#value要素をstrsplitよりも

strsplitが

tmp <- strsplit(crap[4:8], split="#") 
df <- data.frame(date=as.Date(crap[1],format = "%d.%m.%Y"), time=sapply(tmp, "[[", 1), W=sapply(tmp, "[[", 2)) 

でうまく動作しかし、私は彼らが有効な日付形式を持っている場合、(文字など)のリストから要素を分析する方法は考えてきません。

乾杯!

答えて

0

私は解決策を持っていますが、質問した質問や解釈した内容に非常に限定されるかもしれません。

最初にデータを読み取り、PNP and -0,005をデータから削除します。

crap  <- read.table(file = "data.dat",comment.char = " ") 
a  <- as.vector(crap$V1) 
a  <- a[-grep("PNP|-0,005",x = a)] 

は今は今はないと同じ長さの日付のベクトルを作成するベクトルa

dateId <- grep(".",x=a,fixed=T) 
uniquedate <- as.matrix(a[dateId]) 
> uniquedate 
    [,1]   
[1,] "06.02.2014" 
[2,] "07.02.2014" 
[3,] "08.02.2014" 

に含まれる日付を抽出します。対応する日付に存在する値の数の日付を繰り返すことによって、データセット内の値の値を取得します。

len  <- length(dateId) 
dateRepVal <- c(diff(dateId)-1,(length(a) - dateId[len])) 
dates  <- unlist(sapply(1:len,FUN = function(x){rep(uniquedate[x],dateRepVal[x])})) 

他のすべての要素は、我々のデータセット"a"の日付は、私がstrsplit機能を使用することにより、時間とvalを取得し、データフレームを作成し、今この情報をpair.using時間値です期待しています。

timeVal <- strsplit(a[-dateId],split = "#") 
time  <- sapply(timeVal, "[[", 1) 
val  <- sapply(timeVal, "[[", 2) 
DF  <- data.frame(date = dates,time=time,val=val) 

最後に必要な出力は次のようになります。

>DF 
     date time val 
1 06.02.2014 00:05 587 
2 06.02.2014 00:15 591 
3 06.02.2014 23:50 587 
4 06.02.2014 23:55 587 
5 07.02.2014 00:10 587 
6 07.02.2014 00:15 590 
7 07.02.2014 23:55 590 
8 07.02.2014 24:00 593 
9 08.02.2014 00:05 590 
10 08.02.2014 00:10 595 
11 08.02.2014 00:15 600 
12 08.02.2014 23:50 600 
13 08.02.2014 23:55 607 

これが問題を解決します。

+0

素晴らしい!それはチャーミーのように機能します。 – stephan

+0

私は2つの編集をしました。#nVal DF < - data.frame(date = c(dates)、date = {date}}、dateRepVal [x] time = time、val = val) – stephan

+0

喜んで助けました。 – 9Heads

関連する問題