Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library(data.table)
- library(dplyr)
- library(magrittr)
- N = 20000
- T = 10
- nItem = 500
- m = matrix(rbinom(N*T*nItem, 15, 0.4), N)
- dat = data.table(id = 1:nrow(m), m) %>%
- setnames(paste0("V",1:(T*nItem)), paste0(
- rep(paste0('item', 1:nItem),,, T), '_', rep(1:T, nItem)))
- ## method 1
- st = proc.time()
- varChecking = names(dat)[grepl("item\\d+_1$", names(dat))]
- f = function(x) ifelse(x < 5, 0, x)
- dat_out = mutate_each_(dat, funs(f), varChecking)
- namesWorking = gsub("(item\\d+_)1", "\\1", varChecking)
- varsWorking = paste0(rep(namesWorking,,,T-1), rep(2:T,nItem))
- cmd = paste0('ifelse(', rep(namesWorking,,,T-1), '1<5,0,',
- varsWorking, ')')
- dat_out %<>% mutate_(.dots= setNames(lapply(cmd, lazyeval:::interp), varsWorking))
- proc.time() - st
- # user system elapsed
- # 65.48 0.23 68.03
- ## method 2
- st = proc.time()
- varChecking = names(dat)[grepl("item\\d+_1$", names(dat))]
- f = function(x) ifelse(x < 5, 0, x)
- dat_out = mutate_each_(dat, funs(f), varChecking)
- namesWorking = gsub("(item\\d+_)1", "\\1", varChecking)
- varsWorking = paste0(rep(namesWorking,,,T-1), rep(2:T,nItem))
- eval(parse(text = paste0('dat_out=mutate(dat_out,',
- paste0(varsWorking, '=ifelse(', rep(namesWorking,,,T-1), '1<5,0,',
- varsWorking, ')', collapse = ","), ')')))
- proc.time() - st
- # user system elapsed
- # 64.12 0.26 66.75
- st = proc.time()
- varWorking = gsub('(item\\d+_)\\d+$', '\\1', names(dat)) %>%
- unique %>% setdiff('id')
- dat_out = llply(varWorking, function(x){
- tmp_dat = dat %>% select(starts_with(x))
- tmp_dat %<>% setnames(paste0("V", 1:ncol(tmp_dat)))
- f = function(x) ifelse(tmp_dat$V1 > 5, x, 0)
- tmp_dat %<>% mutate_each(funs(f)) %>%
- setnames(paste0(x, 1:ncol(tmp_dat)))
- tmp_dat
- }) %>% bind_cols %>% tbl_dt %>% mutate(id = dat$id)
- proc.time() - st
- # user system elapsed
- # 51.41 0.50 53.87
Advertisement
Add Comment
Please, Sign In to add comment