データがパネルでない場合、各IDによって表示される行数を表示する(R)

データがパネルでない場合、各IDによって表示される行数を表示する(R) photo 2 C

データがパネルでない場合、各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が変更されるたびに焦点を当てることだと思います。

私は試した:

データがパネルでない場合、各IDによって表示される行数を表示する(R) photo 1

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))))

データがパネルでない場合、各IDによって表示される行数を表示する(R) photo 0



source
Rのパネルデータフレームから一意のIDを持つ行を削除するには?
Rスタジオのノートブックデータフレームに表示される列と行の数を変更する方法
IDが数回表示された場合、パンダは行を選択します
jQueryデータテーブルの表示される行の数を変更する
各IDの後半の行をマージしますが、各IDに対して行は同じではありません
各因子Rに「1 – 行数」の配列を作成する
R – データフレームをIDでグループ化し、各IDの開始日と終了日の範囲のレコード数を数える
各データフレームの行をRのベクトルで分割する
Rのxyplotパネルに相関数を追加する
TableView:表示される行の数を調整します
Rating