如何基于上述列中插入/替换值

  • 本文关键字:插入 替换 何基于 r
  • 更新时间 :
  • 英文 :


我已经收到了一个交易日志,我跟踪学生登录学习管理系统(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)

最新更新