我有一个列表的列表具有以下模式:
[[1]]
[[1]]$Jobs
[1] "Principal Data Scientist" "Principal Data Scientist"
[3] "Principal Data Scientist" "Principal Data Scientist"
[5] "Data Science Analyst" "Data Science Analyst"
[[1]]$Company
[1] "IBM" "Lightpath" "Huawei Technologies"
[4] "Dealertrack" "J.P. Morgan" "Noviya Systems"
[[2]]
[[2]]$Jobs
[1] "Data Science Analyst" "Data Science Analyst"
[3] "Data Science Analyst" "Data Science Analyst"
[5] "Data Science Engineer" "Data Science Engineer"
[[2]]$Company
[1] "Petro IT" "Analytic Partners" "Affinity Health Plan"
[4] "IBM" "Commvault" "J. Crew"
[[3]]
[[3]]$Jobs
[1] "Data Science Manager" "Data Science Manager"
[3] "Data Science Manager" "Data Science Manager"
[5] "Staff Data Scientist" "Staff Data Scientist"
[[3]]$Company
[1] "ASDA group" "RTW Retailwinds" "BASF"
[4] "Futures Action Network" "RCI Exchanges" "Sizmek"
现在,我想要一个输出,其中所有类似的列表被分组为一个,如下所示:
$Jobs
[1] "Principal Data Scientist" "Principal Data Scientist"
[3] "Principal Data Scientist" "Principal Data Scientist"
[5] "Data Science Analyst" "Data Science Analyst"
[7] "Data Science Analyst" "Data Science Analyst"
[9] "Data Science Analyst" "Data Science Analyst"
[11] "Data Science Engineer" "Data Science Engineer"
[13] "Data Science Manager" "Data Science Manager"
[15] "Data Science Manager" "Data Science Manager"
[17] "Staff Data Scientist" "Staff Data Scientist"
$Company
[1] "IBM" "Lightpath" "Huawei Technologies"
[4] "Dealertrack" "J.P. Morgan" "Noviya Systems"
[7] "Petro IT" "Analytic Partners" "Affinity Health Plan"
[10] "IBM" "Commvault" "J. Crew"
[13] "ASDA group" "RTW Retailwinds" "BASF"
[16] "Futures Action Network" "RCI Exchanges" "Sizmek"
任何关于这方面的帮助将是非常感激的。提前感谢!!
这是一个嵌套列表。因此,我们循环list
,stack
到一个两列的数据框架,rbind
到list
元素,split
基于'ind'列
d1 <- do.call(rbind, lapply(lst1, function(x) stack(x)))
with(d1, split(values, ind))
或者另一种选择是使list
和split
变平
lst2 <- do.call(c, lst1)
split(unlist(lst2, use.names = FALSE), rep(names(lst2), lengths(lst2)))
或者也可以直接unlist
,然后通过unlist
ed向量的names
的子字符串split
split(unlist(lst1, use.names = FALSE), sub("\d+$", "", names(unlist(lst1))))
或者transpose
和unlist
library(purrr)
transpose(lst1) %>%
map(unlist)
数据lst1 <- list(list(Jobs = c("Principal Data Scientist", "Principal Data Scientist",
"Data Science Analyst"), Company = c("IBM", "Lightpath")), list(
Jobs = c("Principal Data Scientist", "Principal Data Scientist",
"Data Science Analyst"), Company = c("IBM", "Lightpath")))
也许mapply
与do.call
可以帮助(感谢@akrun的数据)
> do.call(function(...) mapply(c, ...), lst)
$Jobs
[1] "Principal Data Scientist" "Principal Data Scientist"
[3] "Data Science Analyst" "Principal Data Scientist"
[5] "Principal Data Scientist" "Data Science Analyst"
$Company
[1] "IBM" "Lightpath" "IBM" "Lightpath"
或者您可以使用list2DF
+apply
+unlist
> apply(list2DF(lst), 1, unlist)
[[1]]
"Principal Data Scientist" "Principal Data Scientist"
"Data Science Analyst" "Principal Data Scientist"
"Principal Data Scientist" "Data Science Analyst"
[[2]]
"IBM" "Lightpath" "IBM" "Lightpath"
如果您的列表为->
L,我们可以尝试:
Map(c,L[[1]],L[[2]],L[[3]])