我在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 )