下記のような契約開始年と契約終了年があった場合、
1.契約年
2.無契約年
を算出したいのですが、どのような方法があるのでしょうか?
lag関数を使おうとしたのですが、思うようにできでいません。
1.契約年は、契約end-契約Start+1で計算ができそうなのは分かるのですが、
無契約期間の場合、契約end-契約Start-1となると推測するのですが、どのような計算式と方法をとればよいのか分かりません。
知りたいのは、無契約期間の年数と、無契約期間の回数です。
ご教示いただけないでしょうか。
高橋
@Hitoshi_Takahashi さん
最終アウトプットはこんなでしょうか?左から、
id
:人のID
start
:契約開始
end
:契約終了
start_lead
:計算用の一時的なカラム
term_start2end
:契約期間(開始〜終了)
term_send2start
:契約期間(1つ前の終了〜開始)
cnt_no_contarct
:その時点で計測できる累計無契約期間の回数
ttl_no_contract
:そのIDの無契約期間の回数
今は時間がないので、問題ないようでしたら、今日のあいているところで内容返答します!
よろしくお願いします
sugiaki さんお返事、本当にありがとうございます。
無契約期間の年数もアウトプットしたいです。
無契約期間が、「 term_send2start
:契約期間(1つ前の終了〜開始)」にあたるか分からないのですが・・。
ID 1 の場合、2012年の契約終了日から2014年の契約開始の間で、1年間の無契約期間があります。
ID 3の場合、2015年の契約終了日から2020年の契約開始の間で、4年間の無契約期間があります。
宜しくお願いいたします。
@Hitoshi_Takahashi さん
貼り付ける画像間違ってました!こっちです。 無契約期間は term_send2start
です!
やっている内容としては、会員ごとにグループ化して、lead()
でlag()
とは反対方向にずらして行を揃えて引く。
group_by(id) %>%
mutate(
start_lead = lead(start,1),
term_start2end = (end - start)+1,
`term_ end2start` = (start_lead - end)-1 ,
cnt_no_contract = cumsum(if_else(!is.na(start_lead),1,0)),
ttl_no_contract = max(cnt_no_contract)
) %>%
ungroup()
cumsum(if_else(!is.na(start_lead),1,0))
は、start_lead
に値があれば1
を返して、会員ごとに累計することで、無契約期間の回数を計算するということをやっています!
よろしくお願いします!
「いいね!」 1
無契約期間は term_send2start
とのこと、了解しました。
お忙しい中、ありがとうございます。
@Hitoshi_Takahashi さん
さっきの返信の下部に、作業内容を記載しておりますので、そちら参考にいただけますと幸いです!
不明点があればお気軽に連絡ください〜!
「いいね!」 1
一気に全部を理解できなかったのですが、
leadを使ってendの次の年をstart_leadのセルに出力させ、start_leadとendの差をterm_ end2startとして計算させているのですね。
出来そうです。
ありがとうございます!
自分の参考のために:https://exploratory.io/note/GMq1Qom5tS/RgD5dzQ3qR?embed=true
「いいね!」 1