我已经收到了一个交易日志,我跟踪学生登录学习管理系统(LMS)。我已经设法将数据传播到几周中。结果数据。帧看起来如下:
UserID 31 32 33 34 35
user1 active active n/a n/a active
user2 n/a n/a active active n/a
user3 active n/a n/a active active
我需要根据先前值插入或替换列值以下类似:
UserID 31 32 33 34 35
user1 new recur drop drop recur
user2 n/a n/a new recur drop
user3 new drop drop recur recur
这是为了向学生展示第一次区分新用户登录的登录模式,重复出现的用户和未登录特定一周的用户。
duplicated
函数可用于此。
也许有点冗长,但是:
df <- data.frame(user1=c('n/a','active','n/a','active'),
user2=c('n/a','n/a','n/a','n/a'),
user3=c('active','n/a','active','n/a'),
user4=c('active','active','active','active'),
stringsAsFactors = FALSE)
recode_col <- function(col) {
coldup <- duplicated(col)
colna <- col=='n/a'
col[!coldup&!colna] <- 'new'
col[coldup&!colna] <- 'recur'
col[colna] <- 'drop'
first_nonna <- which(!colna)[1]
if (is.na(first_nonna)) first_nonna <- length(col)+1
col[1:first_nonna-1] <- 'n/a'
col
}
lapply(df, recode_col)