2016-12-14 17 views
0

基本的に、私はスノーパックのデータを見ています。翌年の10月15日〜5月15日(冬期はもちろん)~215日間の各日付(雪の日)にユニークな値を割り当てたいと思います。次に、季節データの連続した月に対応する列「snowmonth」と、各季節の記録が始まる年を表す「snow year」列を追加します。翌年の10月15日〜4月30日のユニークなシーケンスを作成 - R

しかし、これらの日付を見つけてNAを行に挿入する代わりに、そのステップをスキップして、代わりに「snowmonth」に関してプロットできる連続ルートに移動しました約1のsnowday 『シーケンス」

は基本的に、私は取得する必要があります』:欄の下に、うるう年の215(+1を、そして残りは私は自分自身を行うことができますそれはこの

month day year depth date yearday snowday snowmonth 
    12 26 1955 27 1955-12-26  360  NA  NA 
    12 27 1955 24 1955-12-27  361  NA  NA 
    12 28 1955 24 1955-12-28  362  NA  NA 
    12 29 1955 24 1955-12-29  363  NA  NA 
    12 30 1955 26 1955-12-30  364  NA  NA 
    12 31 1955 26 1955-12-31  365  NA  NA 
    1 1 1956 25 1956-01-01  1  NA  NA 
    1 2 1956 25 1956-01-02  2  NA  NA 
    1 3 1956 26 1956-01-03  3  NA  NA 


man<-data.table() 
man <-  read.delim('mansfieldstake.txt',header=TRUE, check.names=FALSE) 
man[is.na(man)]<-0 
man$date<-paste(man$yy, man$mm, man$dd,sep="-", collapse=NULL) 
man$yearday<-NA #day of the year 1-365 
colnames(man)<- c("month","day","year","depth", "date","yearday") 

man$date<-as.Date(man$date) 
man$yearday<-yday(man$date) 
man$snowday<-NA 
man$snowmonth<-NA 
man[420:500,] 
head(man) 
のように見えます。

出力は次のようになります。

month day year depth date yearday snowday snowmonth 
    12 26 1955 27 1955-12-26  360  73  3 
    12 27 1955 24 1955-12-27  361  74  3 
    12 28 1955 24 1955-12-28  362  75  3 
    12 29 1955 24 1955-12-29  363  76  3 
    12 30 1955 26 1955-12-30  364  77  3 
    12 31 1955 26 1955-12-31  365  78  3 
    1 1 1956 25 1956-01-01  1  79  4 
    1 2 1956 25 1956-01-02  2  80  4 
    1 3 1956 26 1956-01-03  3  81  4 

私はループについて考えてきましたが、それは非効率です。閏年はちょっと混乱してしまいます。これは私が思ったよりも挑戦的になっています。良い最初のプロジェクト!

ここで単純なシーケンスを探して、雪以外の月をすべてドロップするだけです。入力を持っている人のためにありがとう!

+1

は、あなたは出力が見えるように期待私たちを見ることができますか?あなたが求めていることははっきりとは分かりません。 'man $ snowday < - 1:nrow(man)'でしょうか? – emilliman5

+0

man $ snowdayは、%Y-10-15から%Y + 1-5-15までの1:215程度の順序になります。 10月から5月にかけて、ユニークで順序付けられた値を期間の順番に並べるだけで、これは雪の日を定義します。この順番は、毎雪ごとに繰り返される。 10月15日は雪原の最初の雪の日で、5月15日が最後の雪の日です。 – user5691676

答えて

0

私はsnowdayはシーズンの初めからの日数であることを正しく理解していれば、あなたはdata.tableを使用してこの列を作るために必要なのは、次のとおりです。

day_one <- as.Date("1955-10-01") 
man[, snowday := -(date - day_one)] 

あなたが望むすべてが一意のシーケンスである場合値は、seq()です。

次にあなたが使用してsnowmonthを作成することができます。

library(lubridate) 
man[, snowmonth := floor(-time_length(interval(date, day_one), unit = "month")) 
+0

これはありがたいですが、私は1955年から今までの各雪だるまを繰り返す必要があります。そして、雪のごとき60年代の1:215の雪を提供する必要があります。私はこれの構文に苦しんでいると思う - これを動作させるために数日を費やした! – user5691676

+0

これがすべて1つのdata.tableにある場合、日付colに最も近い10月1日を持つ 'day_one'列を作成し、上記の解を適用することができます。 –

関連する問題