10

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

特定的 subjectID 可能已经进行了 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
4

1 回答 1

11

我真的很喜欢这个的简单语法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给出与组一样长的向量。

Asdata.table继承自data.frame任何将 a 作为输入的函数data.frame也将 adata.table作为输入,如果您愿意,您可以轻松转换回来 ( df <- data.frame( dt ))

于 2013-11-07T22:58:50.757 回答