2017-06-08 5 views
0

私のデータには、ベースライン年齢の変数と、ベースライン観察からの月数付きフォローアップ変数があります。両方とも、整数だけの数値ベクトルです。私はフォローアップ時代を計算したい。これらの変数を周期オブジェクトに構文解析して、それらを一緒に追加すると、5年14か月のような結果が得られます。理想的には、私はこれを6年2ヶ月にしたいと思います。周期クラスオブジェクトを追加して年月を計算します。R

library(dplyr) 
library(lubridate) 
library(magrittr) 

set.seed(080617) 
df <- 
    tibble(year = sample(20), 
    month = sample(20)) 

df %<>% 
    mutate(year = years(year)) %>% 
    mutate(month = months(month)) %>% 
    mutate(age = (year + month)) 
df 

私は無駄にdf$age <- as.period(df$age, units = "years")を使用して試してみました。

提案がありますか?

+0

に従うようにするために、year.colとmonth.colする列名を変更し、ベースとして12を使用します。例えば、「13%/%12」は1に等しく、「13 %% 12」も1に等しく、これは1年1ヶ月を意味する。あなたは 'year'と' month'の計算でこれらを使うことができます。 – brittenb

答えて

1

これは、あなたが探している結果を得るはずです。私は、私はあなたの月の変数に/% `%`と `%%`演算子を使用してお勧めしたい、それが簡単にロジックに

library(dplyr) 
library(lubridate) 
library(magrittr) 

set.seed(080617) 
df <- 
    tibble(year.col = sample(20), 
     month.col = sample(20)) 

df %<>% 
    mutate(year.col = years(year.col)) %>% 
    mutate(month.col = months(month.col)) %>% 
    mutate(age = year.col + years(month(month.col) %/% 12) + months(month(month.col) %% 12)) 
+0

整数除算やモジュロ前には見られませんでした - 非常に便利です!これは、最小限の例では効果的です。残念ながら私が実際の*データに適用すると、 'Error in as.POSIXlt.numeric(x): 'origin'を指定する必要があります。コードは上記と同じですが、関連する列名のみが変更されています。何か案は? – daibhaidhhen

+0

実際それを自分で考え出しました。私は 'マウス 'と' VIM'パッケージも読み込んでいました。それらを削除し、それは正常に動作します。実際の衝突は分かりませんが、ちょっと - それは動作します! – daibhaidhhen

関連する問題