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

时间:2013-11-07 22:52:42

标签: 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

我想要以下输出

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

1 个答案:

答案 0 :(得分:9)

我非常喜欢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

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

由于data.table继承自data.frame,任何以data.frame为输入的函数也会以data.table作为输入,如果您愿意,可以轻松转换回来df <- data.frame( dt ) {1}})