温馨提示:本文翻译自stackoverflow.com,查看原文请点击:grouping - Display how many rows appear by each ID when data is not a panel (R)
grouping r

grouping - 当数据不是面板(R)时,显示每个ID出现多少行

发布于 2020-03-27 11:07:43

我正在使用一个纵向数据集,该数据集在单个时间单位中每个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的行数。

查看更多

查看更多

提问者
Arturo Sbr
被浏览
222
tmfmnk 2019-07-03 22:22

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