Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library(data.table)
- library(dplyr)
- library(tidyr)
- library(magrittr)
- DT = data.table(stu = paste0("stu", 1:20),
- X = rnorm(20), Y = rnorm(20)) %>%
- gather(cate, values, -stu)
- DT %>% spread(stu, values) %>% tbl_dt(FALSE)
- # cate stu1 stu10 stu11 stu12 stu13 stu14
- # 1 X -0.08476976 0.5428922 1.9929332 -0.6145632 -0.06098296 -1.066283
- # 2 Y 0.59710869 -1.0037766 0.3508158 0.4587201 -0.13639207 1.385517
- # Variables not shown: stu15 (dbl), stu16 (dbl), stu17 (dbl), stu18 (dbl),
- # stu19 (dbl), stu2 (dbl), stu20 (dbl), stu3 (dbl), stu4 (dbl), stu5 (dbl),
- # stu6 (dbl), stu7 (dbl), stu8 (dbl), stu9 (dbl)
- ## factorize
- DT = data.table(stu = paste0("stu", 1:20),
- X = rnorm(20), Y = rnorm(20)) %>%
- gather(cate, values, -stu)
- DT %>% mutate(stu = factor(stu, levels = paste0("stu", 1:20))) %>%
- spread(stu, values) %>% tbl_dt(FALSE)
- # cate stu1 stu2 stu3 stu4 stu5 stu6
- # 1 X 1.6890231 -1.300332 -1.378376 -1.874321 0.54141060 -1.2848391
- # 2 Y 0.2796895 1.635385 1.048334 0.424909 0.09111916 -0.4147811
- # Variables not shown: stu7 (dbl), stu8 (dbl), stu9 (dbl), stu10 (dbl), stu11
- # (dbl), stu12 (dbl), stu13 (dbl), stu14 (dbl), stu15 (dbl), stu16 (dbl),
- # stu17 (dbl), stu18 (dbl), stu19 (dbl), stu20 (dbl)
- ## method 1 with select
- DT_spread = DT %>% spread(stu, values)
- sele_names = setdiff(names(DT_spread), paste0("stu", 1:20))
- col_num = match(c(sele_names, paste0("stu", 1:20)), names(DT_spread))
- DT_spread %>% select(col_num) %>% tbl_dt(FALSE)
- # cate stu1 stu2 stu3 stu4 stu5 stu6
- # 1 X 1.6890231 -1.300332 -1.378376 -1.874321 0.54141060 -1.2848391
- # 2 Y 0.2796895 1.635385 1.048334 0.424909 0.09111916 -0.4147811
- # Variables not shown: stu7 (dbl), stu8 (dbl), stu9 (dbl), stu10 (dbl), stu11
- # (dbl), stu12 (dbl), stu13 (dbl), stu14 (dbl), stu15 (dbl), stu16 (dbl),
- # stu17 (dbl), stu18 (dbl), stu19 (dbl), stu20 (dbl)
- ## method 2
- DT %<>% mutate(stu_num = as.integer(gsub("stu(\\d*)", "\\1", stu)),
- stu = sprintf("stu%02i", stu_num)) %>% select(-stu_num)
- DT %>% spread(stu, values) %>% tbl_dt(FALSE)
- # cate stu01 stu02 stu03 stu04 stu05 stu06
- # 1 X 1.6890231 -1.300332 -1.378376 -1.874321 0.54141060 -1.2848391
- # 2 Y 0.2796895 1.635385 1.048334 0.424909 0.09111916 -0.4147811
- # Variables not shown: stu07 (dbl), stu08 (dbl), stu09 (dbl), stu10 (dbl),
- # stu11 (dbl), stu12 (dbl), stu13 (dbl), stu14 (dbl), stu15 (dbl), stu16
- # (dbl), stu17 (dbl), stu18 (dbl), stu19 (dbl), stu20 (dbl)
Advertisement
Add Comment
Please, Sign In to add comment