Guest User

test

a guest
Sep 15th, 2015
118
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 1.84 KB | None | 0 0
  1. library(data.table)
  2. library(dplyr)
  3. library(magrittr)
  4. N = 20000
  5. T = 10
  6. nItem = 500
  7. m = matrix(rbinom(N*T*nItem, 15, 0.4), N)
  8. dat = data.table(id = 1:nrow(m), m) %>%
  9.   setnames(paste0("V",1:(T*nItem)), paste0(
  10.   rep(paste0('item', 1:nItem),,, T), '_', rep(1:T, nItem)))
  11.  
  12. ## method 1
  13. st = proc.time()
  14. varChecking = names(dat)[grepl("item\\d+_1$", names(dat))]
  15. f = function(x) ifelse(x < 5, 0, x)
  16. dat_out = mutate_each_(dat, funs(f), varChecking)
  17. namesWorking = gsub("(item\\d+_)1", "\\1", varChecking)
  18. varsWorking = paste0(rep(namesWorking,,,T-1), rep(2:T,nItem))
  19. cmd = paste0('ifelse(', rep(namesWorking,,,T-1), '1<5,0,',
  20.     varsWorking, ')')
  21. dat_out %<>% mutate_(.dots= setNames(lapply(cmd, lazyeval:::interp), varsWorking))
  22. proc.time() - st
  23. #   user  system elapsed
  24. #  65.48    0.23   68.03
  25.  
  26. ## method 2
  27. st = proc.time()
  28. varChecking = names(dat)[grepl("item\\d+_1$", names(dat))]
  29. f = function(x) ifelse(x < 5, 0, x)
  30. dat_out = mutate_each_(dat, funs(f), varChecking)
  31. namesWorking = gsub("(item\\d+_)1", "\\1", varChecking)
  32. varsWorking = paste0(rep(namesWorking,,,T-1), rep(2:T,nItem))
  33. eval(parse(text = paste0('dat_out=mutate(dat_out,',
  34.   paste0(varsWorking, '=ifelse(', rep(namesWorking,,,T-1), '1<5,0,',
  35.     varsWorking, ')', collapse = ","), ')')))
  36. proc.time() - st
  37. #   user  system elapsed
  38. #  64.12    0.26   66.75
  39.  
  40. st = proc.time()  
  41. varWorking = gsub('(item\\d+_)\\d+$', '\\1', names(dat)) %>%
  42.   unique %>% setdiff('id')
  43. dat_out = llply(varWorking, function(x){
  44.   tmp_dat = dat %>% select(starts_with(x))
  45.   tmp_dat %<>% setnames(paste0("V", 1:ncol(tmp_dat)))
  46.   f = function(x) ifelse(tmp_dat$V1 > 5, x, 0)
  47.   tmp_dat %<>% mutate_each(funs(f)) %>%
  48.     setnames(paste0(x, 1:ncol(tmp_dat)))
  49.   tmp_dat
  50. }) %>% bind_cols %>% tbl_dt %>% mutate(id = dat$id)
  51. proc.time() - st
  52. #   user  system elapsed
  53. #  51.41    0.50   53.87
Advertisement
Add Comment
Please, Sign In to add comment