Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- library(data.table)
- library(pipeR)
- DT <- data.table(a = list(list(1:5), list(2:4), list(1:5)), b = 1:3,
- c = list(list(0:4), list(6:8), list(7:11)), d = 2:4)
- # a b c d
- # 1: <list> 1 <list> 2
- # 2: <list> 2 <list> 3
- # 3: <list> 3 <list> 4
- autoFind <- function(DT){
- setdiff(names(DT), names(DT)[sapply(DT, function(x) any(class(x) %in% "list"))])
- }
- extendTbl <- function(DT, groupbyVar = autoFind(DT)){
- expr <- setdiff(names(DT), groupbyVar) %>>%
- (paste0(., "=unlist(", ., ")")) %>>%
- paste0(collapse = ",") %>>% (paste0(".(", ., ")"))
- return(DT[ , eval(parse(text = expr)), by = groupbyVar])
- }
- extendTbl(DT)
- # b d a c
- # 1: 1 2 1 0
- # 2: 1 2 2 1
- # 3: 1 2 3 2
- # 4: 1 2 4 3
- # 5: 1 2 5 4
- # 6: 2 3 2 6
- # 7: 2 3 3 7
- # 8: 2 3 4 8
- # 9: 3 4 1 7
- # 10: 3 4 2 8
- # 11: 3 4 3 9
- # 12: 3 4 4 10
- # 13: 3 4 5 11
- extendTbl(DT, c("b", "d"))
- # b d a c
- # 1: 1 2 1 0
- # 2: 1 2 2 1
- # 3: 1 2 3 2
- # 4: 1 2 4 3
- # 5: 1 2 5 4
- # 6: 2 3 2 6
- # 7: 2 3 3 7
- # 8: 2 3 4 8
- # 9: 3 4 1 7
- # 10: 3 4 2 8
- # 11: 3 4 3 9
- # 12: 3 4 4 10
- # 13: 3 4 5 11
Advertisement
Add Comment
Please, Sign In to add comment