如何为每个记录序列分配唯一ID?
例如,我有下表:
time machine visitor
11:30 A 123
11:31 A 123
11:33 A 123
11:34 A 256
11:35 A 256
11:36 A 256
11:37 A 256
11:38 A 789
11:40 A 789
11:42 A 789
11:50 A 123
11:51 A 123
因此我希望将以下会话ID添加到每条记录中:
time machine visitor session
11:30 A 123 1
11:31 A 123 1
11:33 A 123 1
11:34 A 256 2
11:35 A 256 2
11:36 A 256 2
11:37 A 256 2
11:38 A 789 3
11:40 A 789 3
11:42 A 789 3
11:50 A 123 4
11:51 A 123 4
我写了一个应该这样做的循环,但它太慢了:
session = 1
for (i in 2:nrow(df)) {
if(df[i, ]$visitor != df[i-1, ]$visitor)
{
session = session + 1
}
df[i, ]$session = session
}
答案 0 :(得分:1)
我们可以尝试
library(data.table)
setDT(df1)[, session:= .GRP, .(visitor, machine)]
或者没有任何分组,使用base R
v1 <- do.call(paste, df1[c('visitor', 'machine')])
df1$session <- match(v1, unique(v1))
如果访客&#39;经过一些休息后重复,我们可以在会议期间进行会议。与众不同
setDT(df1)[, session := rleid(visitor)]
df1
# time machine visitor session
#1: 11:30 A 123 1
#2: 11:31 A 123 1
#3: 11:33 A 123 1
#4: 11:34 A 256 2
#5: 11:35 A 256 2
#6: 11:36 A 256 2
#7: 11:37 A 256 2
#8: 11:38 A 789 3
#9: 11:40 A 789 3
#10:11:42 A 789 3
答案 1 :(得分:0)
可能不是最清晰的方法,但您可以执行以下操作:
void readAddress(uint16_t **pointer_)
{
*pointer_ = readArray();
}
稍微分解一下:
df$session <- cumsum(c(TRUE,as.logical(diff(df$visitor))))