Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library(data.table)
- library(reshape2)
- library(dplyr)
- library(tidyr)
- library(magrittr)
- dat = data.table(ID = rep(LETTERS[1:2], 4:3),
- location = c('TAI', 'JP', 'CH', 'KOE', 'JP', 'GOK', 'TA'),
- year = c(2012, 2013, 2014, 2011, 2011, 2015, 2012),
- sex = rep(c("F", "M"), 4:3))
- ## 1
- dat %>% group_by(ID, sex) %>%
- mutate(location_name = paste0("location_", 1:n())) %>%
- select(-year) %>% spread(location_name, location, fill = "")
- # ID sex location_1 location_2 location_3 location_4
- # 1 A F TAI JP CH KOE
- # 2 B M JP GOK TA
- ## 2
- dat %>% spread(year, location, fill="")
- ## dcast.data.table(dat, ID + sex ~ year, value.var = "location")
- # ID sex 2011 2012 2013 2014 2015
- # 1: A F KOE TAI JP CH
- # 2: B M JP TA GOK
- ## 3
- dat %>% spread(year, location, fill="") %>%
- setnames(as.character(2011:2015), paste0("year_", 2011:2015)) %>%
- mutate(location = paste(year_2011, year_2012,year_2013,year_2014,year_2015, sep = ",")) %>%
- mutate(location = gsub(',+', ',',gsub(',$', '', location))) %>%
- select(ID, sex, location)
- # ID sex location
- # 1: A F KOE,TAI,JP,CH
- # 2: B M JP,TA,GOK
- ## 3 (method 2)
- dat3 = dat %>% mutate(ones = "c1") %>% select(-year) %>%
- dcast.data.table(ID + sex ~ ones,
- fun.aggregate = function(x){paste(x, collapse = ',')},
- value.var = "location") %>% setnames("c1", "location")
- dat3
- # ID sex location
- # 1: A F TAI,JP,CH,KOE
- # 2: B M JP,GOK,TA
- ## 3 (method 2 with order of year)
- dat3_2 = dat %>% mutate(ones = "c1") %>%
- arrange(ID, year) %>% select(-year) %>%
- dcast.data.table(ID + sex ~ ones,
- fun.aggregate = function(x){paste(x, collapse = ',')},
- value.var = "location") %>% setnames("c1", "location")
- dat3_2
- # ID sex location
- # 1: A F KOE,TAI,JP,CH
- # 2: B M JP,TA,GOK
Advertisement
Add Comment
Please, Sign In to add comment