我在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
答案 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}})