我收到了一个交易日志,我跟踪学生登录学习管理系统(LMS)。我已经设法将数据传播到数周。结果data.frame看起来如下:
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
这是为了向学生显示登录模式,这些模式首次区分新用户日志记录,重复用户和未在特定周内登录的用户。
答案 0 :(得分:0)
可以使用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)