データがパネルでない場合、各IDによって表示される行数を表示する(R)
私は、単一の時間単位でIDごとに複数の行を持つ縦方向のデータセットを使って作業しています。私はこれまでにこのようなケースを見たことがなく、同様の質問を見つけることができませんでした。
この例では、グループはお金を借りています。各グループは複数のクライアントによって形成され、各クレジットは複数の月に表示される可能性があります(データは縦方向です)。単一のグループに複数のクレジットがある場合は、貸し手との最初の、2番目または3番目のクレジットかどうかを表示したいと思います。
次の例では、列Iterationを宣言したいと思います。 クライアント1と2によって形成されるグループ1は、2018年1月のcredit_ID 100と3月のcredit_ID 233の2つのローンを取得します。
> dt
Client Group Credit_ID Crop File_origin Iteration
1 1 100 2018-01 2018-01 1
2 1 100 2018-01 2018-01 1
1 1 100 2018-01 2018-02 1
2 1 100 2018-01 2018-02 1
1 1 233 2018-03 2018-03 2
2 1 233 2018-03 2018-03 2
Iteration列を定義するにはどうすればよいですか?私はキーがGroupとcredit_IDが変更されるたびに焦点を当てることだと思います。
私は試した:
library(data.table)
dt[, 1:.N, by = list(Group, Credit_ID)]
しかし、これはグループごとの行数とクレジットIDを列挙します。
1つのdplyrの可能性は次のとおりです。
df %>%
group_by(Group, Client) %>%
mutate(Res = cumsum(!duplicated(Credit_ID)))
Client Group Credit_ID Crop File_origin Iteration Res
<int> <int> <int> <chr> <chr> <int> <int>
1 1 1 100 2018-01 2018-01 1 1
2 2 1 100 2018-01 2018-01 1 1
3 1 1 100 2018-01 2018-02 1 1
4 2 1 100 2018-01 2018-02 1 1
5 1 1 233 2018-03 2018-03 2 2
6 2 1 233 2018-03 2018-03 2 2
またはbase Rと同じ:
with(df, ave(Credit_ID, Group, Client, FUN = function(x) cumsum(!duplicated(x))))
source