R 聚合连续行
我在R中有一个R 聚合连续行,r,R,我在R中有一个data.frame和一系列变量 userID (numeric) var1 (factor) var2 (factor) time (character) action (character) 前3列对于每个用户会话都是相同的,可以有许多行。但是,time和action每行都会更改 我尝试了aggregate将整个会话(连续行)合并到一行中 dat <- aggregate(cbind(time, action) ~ userID + var1 + var2,
data.frame
和一系列变量
userID (numeric) var1 (factor) var2 (factor) time (character) action (character)
前3列对于每个用户会话都是相同的,可以有许多行。但是,time
和action
每行都会更改
我尝试了aggregate
将整个会话(连续行)合并到一行中
dat <- aggregate(cbind(time, action) ~ userID + var1 + var2,
data = log, FUN = paste, collapse = "|")
dat我将创建一个user.session ID,以便为给定用户/var1/var2的每个连续行序列分配一个唯一的ID。首先,一个示例数据集
log<-data.frame(
user = rep(c(1,2,3,1,3,4), times),
var1 = factor(rep(letters[c(1,2,3,1,3,4)+7], times)),
var2 = factor(rep(letters[c(1,2,3,1,3,4)+13], times)),
time = "a",
action="b",
stringsAsFactors=F
)
就像MrFlick所说的,除了创建user.session
变量外,还使用:
rle <- with(log, rle(as.character(interaction(user, var1, var2))))
log$user.session <- rep(seq_along(rle$lengths), rle$lengths)
rle所以在床上我有了相同的认识,那就是添加一个user.session列。我喜欢你们的两种解决方案,但第二种更容易理解,这就是我选择它的原因。无论如何,这是第三种可能性
日志$user.session
dat <- aggregate(cbind(time, action) ~ user + var1 + var2 + user.session,
data = log, FUN = paste, collapse = "|")
user var1 var2 user.session time action
1 1 h n 1 a|a|a|a|a b|b|b|b|b
2 2 i o 1 a|a|a b|b|b
3 3 j p 1 a b
4 4 k q 1 a|a|a b|b|b
5 1 h n 2 a|a b|b
6 3 j p 2 a|a|a|a|a|a|a b|b|b|b|b|b|b
rle <- with(log, rle(as.character(interaction(user, var1, var2))))
log$user.session <- rep(seq_along(rle$lengths), rle$lengths)