celestialgod

multieval mutate

Sep 15th, 2015
207
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 0.91 KB | None | 0 0
  1. library(data.table)
  2. library(dplyr)
  3. library(magrittr)
  4. N = 10
  5. T = 5
  6. nItem = 4
  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:20), paste0(rep(LETTERS[1:nItem],,, T),
  10.     rep(1:T, nItem)))
  11.  
  12. varChecking = names(dat)[grepl("[A-Z]1", names(dat))]
  13. f = function(x) ifelse(x < 5, 0, x)
  14. dat_out = mutate_each_(dat, funs(f), varChecking)
  15.  
  16. namesWorking = gsub("([A-Z])1", "\\1", varChecking)
  17. varsWorking = paste0(rep(namesWorking,,,T-1), rep(2:T,nItem))
  18.  
  19. ## method 1
  20. cmd = paste0('ifelse(', rep(namesWorking,,,T-1), '1<5,0,',
  21.     varsWorking, ')')
  22. mutate_(dat_out, .dots= setNames(lapply(cmd, lazyeval:::interp), varsWorking))
  23.  
  24. ## method 2
  25. eval(parse(text = paste0('dat_out=mutate(dat_out,',
  26.   paste0(varsWorking, '=ifelse(', rep(namesWorking,,,T-1), '1<5,0,',
  27.     varsWorking, ')', collapse = ","), ')')))
  28. ## 然後就回到原本的左移問題~~~
Advertisement
Add Comment
Please, Sign In to add comment