将所有相似的列表组合成列表的列表

  • 本文关键字:列表 组合 相似 r
  • 更新时间 :
  • 英文 :


我有一个列表的列表具有以下模式:

[[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到一个两列的数据框架,rbindlist元素,split基于'ind'列

d1 <- do.call(rbind, lapply(lst1, function(x) stack(x)))
with(d1, split(values, ind))

或者另一种选择是使listsplit变平

lst2 <- do.call(c, lst1)
split(unlist(lst2, use.names = FALSE),  rep(names(lst2), lengths(lst2)))

或者也可以直接unlist,然后通过unlisted向量的names的子字符串split

split(unlist(lst1, use.names = FALSE), sub("\d+$", "", names(unlist(lst1))))

或者transposeunlist

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")))

也许mapplydo.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]])

最新更新