为R中的一组类似行添加计数器列

BIC*_*ube 8 r

我在R中有一个有两列的数据框.第一列包含subjectID,第二列包含主题已完成的试用ID.

特定主题ID可能已经进行了超过1次的试验.我想添加一个带有计数器的列,该计数器开始计算每个主题 - 试验唯一值,并递增1,直到它到达最后一行.

更准确地说,我有这张表:

ID T
A  1
A  1
A  2
A  2
B  1
B  1
B  1
B  1
Run Code Online (Sandbox Code Playgroud)

我想要以下输出

ID  T  Index
A   1   1
A   1   2
A   2   1
A   2   2
B   1   1
B   1   2
B   1   3
B   1   4
Run Code Online (Sandbox Code Playgroud)

Sim*_*lon 10

我真的很喜欢这个简单的语法data.table(更不用说速度了)......

#  Load package
require( data.table )
#  Turn data.frame into a data.table
dt <- data.table( df )

#  Get running count by ID and T
dt[ , Index := 1:.N , by = c("ID" , "T") ]
#   ID T Index
#1:  A 1     1
#2:  A 1     2
#3:  A 2     1
#4:  A 2     2
#5:  B 1     1
#6:  B 1     2
#7:  B 1     3
#8:  B 1     4
Run Code Online (Sandbox Code Playgroud)

.N是一个等于每个组中行数的整数.这些组由by参数中的列名定义,因此1:.N只要给出一个向量即可.

由于任何接受输入的函数的data.table继承也将作为输入,如果你愿意,你可以很容易地转换回来()data.framedata.framedata.tabledf <- data.frame( dt )