我正在使用一个纵向数据集,该数据集在单个时间单位中每个ID具有多个行。我以前从未见过这样的情况,也找不到任何类似的问题。
在此示例中,团体借钱。每个小组由多个客户组成,每个信用额可能会在多个月内出现(数据是纵向的)。如果单个组有多个贷方,我想显示这是贷方提供的第一,第二还是第三贷方。
在下面的示例中,我想声明column Iteration
。让由客户1和2组成的组1获得两笔贷款:2018年1月的Credit_ID 100和3月的Credit_ID 233。
> 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)]
但这枚举每个组和Credit_ID的行数。
一种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))))