2017-04-24 4 views
0

J'ai un certain nombre de listes de listes, et dans chacune d'elles la variable que j'ai besoin d'extraire est imbriquée d'une manière légèrement différente. Existe-t-il un moyen simple de rechercher la variable et de l'extraire?R: Rechercher et extraire des variables à partir de listes de listes

Exemple liste

list1 <- list(AccountingSupplierParty = list(Party = list(PartyName = "Company Incorporated", PartyType = "The worst party")), DataSet = "Data Set 1") 
list2 <- list(SupplierParty = list(Party = list(PartyName = "Company A/S", PartyType = "The best party")), DataSet = "Data Set 2") 

je voudrais extraire "PartyName". Il est pas si efficace d'apprendre toutes les combinaisons de variables dans un grand ensemble de données comme illustré ci-dessous:

Company1 <- list1$AccountingSupplierParty$Party$PartyName 
Company2 <- list2$SupplierParty$Party$PartyName 

La sortie Je voudrais est:

"Company Incorporated" 
"Company A/S" 
+0

Vous devriez faire votre exemple [reproductible] (http://stackoverflow.com/questions/5963269/how-to-make-a-great -r-reproducible-example # 5963610) en ajoutant les résultats de 'dput (list1)' et 'dput (list2)'. – alistaire

+0

Merci, je vais faire l'exemple maintenant –

+0

Vous pourriez juste abstraire la partie qui change: 'spply (liste (liste1, liste2), fonction (x) {x [[1]] $ Party $ PartyName})' – alistaire

Répondre

2

Vous pouvez unlist chaque liste, puis éliminer tout ce qui ne se terminent pas en PartyName.

list1 <- list(AccountingSupplierParty = list(Party = list(PartyName = "Company Incorporated", PartyType = "The worst party")), DataSet = "Data Set 1") 
list2 <- list(SupplierParty = list(Party = list(PartyName = "Company A/S", PartyType = "The best party")), DataSet = "Data Set 2") 

c1 <- unlist(list1) 
c1 <- c1[grepl("PartyName$", names(c1))] 

AccountingSupplierParty.Party.PartyName 
       "Company Incorporated" 

c2 <- unlist(list2) 
c2 <- c2[grepl("PartyName$", names(c2))] 
c2 

SupplierParty.Party.PartyName 
       "Company A/S" 
+0

Merci , ça fait l'affaire. –

0

Vous pouvez essayer la bibliothèque rlist.
https://cran.r-project.org/web/packages/rlist/rlist.pdf

library(rlist) 
list.flatten(list1)[1] 
list.flatten(list2)[1] 

$AccountingSupplierParty.Party.PartyName 
[1] "Company Incorporated" 
$SupplierParty.Party.PartyName 
[1] "Company A/S" 
0

Vous pouvez essayer cette

dfs <- data.frame(lapply(list1, data.frame, stringsAsFactors = FALSE)) 
df1[ , grepl("PartyName" , names(df1)) ] 

Avis deux fois je data.frame pour être en mesure de faire fonctionner les stringAsFactors. Cela vous donnera

[1] "Company Incorporated" 

Espoir qui aide, Umberto