在R中按组向数据帧添加索引(或计数器)

sjg*_*ght 4 indexing counter r plyr seq

我有一个像

ProjectID Dist
  1        x
  1        y
  2        z
  2        x
  2        h
  3        k
  ....     ....
Run Code Online (Sandbox Code Playgroud)

我想添加第三列,以便每个ProjectID都有一个递增计数器:

ProjectID Dist counter
  1        x     1
  1        y     2
  2        z     1
  2        x     2
  2        h     3
  1        k     3
  ....     ....
Run Code Online (Sandbox Code Playgroud)

我看了一下,seq rank还有其他一些地方,特别是看我是否可以使用ddply以帮助您:

df$counter <- ddply(df,.(projectID), function(x).....? )
Run Code Online (Sandbox Code Playgroud)

我想我可以调整此答案如何按组创建计数器/计数?但是更喜欢使用ddply之类的东西(我找不到与cumsum等效的东西,但是我认为这是相同的原理:在Pandas中按组创建整数递增的序列)。那会让我索引列表中的出现(例如在此列表上合并)。

jal*_*pic 6

一个dplyr解决方案很简单:

library(dplyr)

df %>% group_by(ProjectID) %>% mutate(counter = row_number(ProjectID))


#  ProjectID Dist counter
#1         1    x       1
#2         1    y       2
#3         2    z       1
#4         2    x       2
#5         2    h       3
#6         1    k       3
Run Code Online (Sandbox Code Playgroud)