2017-05-23 26 views
0

私はマスターのプロジェクトで働いている絶対的な初心者です。異なる行の年齢計算が異なります

私は、馬(馬、収入、時間記録など)の情報を含むdata.frameを持っています。データはすべての行に競馬の特定の年の情報が含まれ、「合計」の各馬の最初の行が含まれるように構成されています。何の問題もなく

travdata$Age<-age_calc(as.Date(travdata$Birth.date), enddate=as.Date("2016-12-31"), 
         units="years") 

:私はeeptoolsパッケージにage_calc機能を使って自分の年齢で新しい変数を作成し

Data example :それはこのようになります。私が把握しようとしていることは、私が彼らの情報を持っている各特定の年の馬の年齢を計算する方法があるかどうかです。すなわち、「合計」行は2016-12年までの年齢です。 31歳、2015年にはその時代になるなど私はage_calcにif文を追加しようとしていましたが、うまくいかないでしょうし、これをどうやって行うのが最善であるのか本当に迷っています。

私が指摘してくれる文献やお手伝いがあれば、幸いです。

MWE

travdata <- data.frame(
    "Id.Number"=c(rep("1938-98",3),rep("1803-97",7),rep("1221-03",4)), 
    "Name"=c(rep("Muuttuva",3),rep("Pelson Poika",7),rep("Muusan Muisto",4)), 
    "Sex"=c(rep("Mare",3),rep("Gelding",7),rep("Gelding",4)), 
    "Birth.year"=c(rep(1998,3),rep(1997,7),rep(2003,4)), 
    "Birth.date"=c(rep("1998-07-01",3),rep("1997-07-14",7),rep("2003-05-07",4)), 
    "Competition.year" = c("Total",2005,2004,"Total",2003,2004,2006,2005,2002,2001,2008,2010,"Total",2009), 
    "starts"=c(20,11,9,44,21,6,7,5,3,2,1,1,4,2), 
    "X1st.placements"=c(0,0,0,3,3,0,0,0,0,0,0,0,0,0), 
    "X2nd.placements"=c(2,2,0,1,0,1,0,0,0,0,0,0,0,0), 
    "X3rd.placements"=c(2,2,0,1,1,0,0,0,0,0,0,0,0,0), 
    "Earnings.euro"=c(1525,1425,100,2078,1498,580,0,0,0,0,0,0,10,10) 
) 
+3

のためのフォーマットを指定することです。これらのヒントを見て、[最小、完全で検証可能な例](http://stackoverflow.com/help/mcve)の作成方法と[Rの素晴らしい例を作成する]( http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example)。 – lmo

+3

このデータをきちんと整理して総行を削除すると、 'dplyr :: group_by'を使って後で簡単に合計を得ることができます。あるいは、これらの行を新しい表に移動するだけでも構いません。これについて助けが必要な場合は、 'dput(head(travdata、10))'を使って、結果をあなたの質問に貼り付けてください。これは、誰かが始めるための最小の例を作成します。 –

答えて

0

トリックは、 "合計" 行をフィルタリングし、StackOverflowのへようこそas.Date()機能

library(eeptools) 
travdata <- data.frame(
    "Id.Number"=c(rep("1938-98",3),rep("1803-97",7),rep("1221-03",4)), 
    "Name"=c(rep("Muuttuva",3),rep("Pelson Poika",7),rep("Muusan Muisto",4)), 
    "Sex"=c(rep("Mare",3),rep("Gelding",7),rep("Gelding",4)), 
    "Birth.year"=c(rep(1998,3),rep(1997,7),rep(2003,4)), 
    "Birth.date"=c(rep("1998-07-01",3),rep("1997-07-14",7),rep("2003-05-07",4)), 
    "Competition.year" = c("Total",2005,2004,"Total",2003,2004,2006,2005,2002,2001,2008,2010,"Total",2009), 
    "starts"=c(20,11,9,44,21,6,7,5,3,2,1,1,4,2), 
    "X1st.placements"=c(0,0,0,3,3,0,0,0,0,0,0,0,0,0), 
    "X2nd.placements"=c(2,2,0,1,0,1,0,0,0,0,0,0,0,0), 
    "X3rd.placements"=c(2,2,0,1,1,0,0,0,0,0,0,0,0,0), 
    "Earnings.euro"=c(1525,1425,100,2078,1498,580,0,0,0,0,0,0,10,10) 
) 

travdata$Age<-age_calc(as.Date(travdata$Birth.date), 
         enddate=as.Date("2016-12-31"), units="years") 

competitions <- travdata[travdata$Competition.year!="Total",] 
competitions$Competition.age<-age_calc(
       as.Date(competitions$Birth.date), 
       enddate=as.Date(competitions$Competition.year, format="%Y"), 
       units="years",F) 
+1

はい、これでした!ありがとうありがとう!!コードへのそのフォーマットの調整は、私にとっては欠けていたものでした。私は未来のためにそれを念頭に置いておきます:) –

+0

ちょっと@rgunning!最後にお手伝いをしてくれてありがとう。私はこのコードに行きます。なぜなら、私が行った別の年齢変数、Real.ageを月に変換したいからです。あなたの古いコードだけでなく、何もありません! (現在のデータセットの作成方法のスクリプトを保存しました)。これは 'Real.age'変数のために行ったことです: ' Data_year $ Real.age <-age_calc(as.Date(Data_year $ Birth.date)、enddate = as.Date(Data_year $ Competition.year、format = "%Y")、単位= "年"、F) 'となります。私は最後の眼鏡を数ヶ月に変えようとしました、そして、それは、原点が供給されなければならないということです。あなたのコードでさえ!助けて? –

+0

@LauraBasあなたにはうまくいかないと奇妙です。 'units =" years "'を 'units =" months "'にスワップすると動作します。すべての値に日付が付いていることを確認するには、 'as.Date(Data_year $ Birth.date)'と 'as.Date(Data_year $ Competition.year、format ="%Y ")を見てください。 age_calc関数はNaN値にうまく対応しません。 – rgunning

関連する問題