'How to use rbindlist(data) instead of do.call(rbind, data) in this case
library(dplyr)
library(data.table)
library(stringr)
test = c('a1b1', 'a2b2', 'a3b3')
result = rbind(c(1,1),
c(2,2),
c(3,3))
result
[,1] [,2]
[1,] 1 1
[2,] 2 2
[3,] 3 3
test2<-do.call(rbind,test %>% str_split('a'))
test3<-do.call(rbind,test2 %>% .[,2] %>% str_split('b'))
test3
[,1] [,2]
[1,] "1" "1"
[2,] "2" "2"
[3,] "3" "3"
- do.call(rbind, data) is not equal rbindlist(data) ? data.table::rbindlist is not working. If I want to use rbindlist, what can I do?
rbindlist(test %>% str_split('a'))
Error in rbindlist(test %>% str_split("a")) :
Item 1 of input is not a data.frame, data.table or list
Solution 1:[1]
If you want to use a similar approach using rbindlist, then you could do something like below. Essentially, you can add in a step to to turn each item in the list into a data.table (but need to transpose first).
library(dplyr)
library(data.table)
library(stringr)
test2 <- rbindlist(test %>% str_split("a") %>% lapply(., function(x)
as.data.table(t(x))))
test3 <- rbindlist(as.matrix(test2) %>% .[,2] %>% str_split("b") %>% lapply(., function(x)
as.data.table(t(x))))
Output
test3
V1 V2
1: 1 1
2: 2 2
3: 3 3
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | AndrewGB |
