comment trier chaque objet d'une liste contenant la liste de variables à partir de plusieurs données

Nov 24 2020

J'ai une liste

lst1<-list(cxr.CSV = c("project", "Subject", "Site", "InstanceName", 
"RecordPosition", "CXRDT", "CXRFIND", "CXRFNDSP", "CXRYN"), cy1.CSV = c("project", 
"Subject", "Site", "InstanceName", "RecordPosition", "CYSHPYN", 
"CYSHPDT", "CY1TMPT", "CYND", "CYNDSP", "CYDT", "CYTM"), cy2.CSV = c("project", 
"Subject", "Site", "InstanceName", "RecordPosition", "CYSHPYN", 
"CYSHPDT", "CY2TMPT", "CYND", "CYNDSP", "CYDT", "CYTM"), cy24.CSV = c("project", 
"Subject", "Site", "InstanceName", "RecordPosition", "CYSHPYN", 
"CYSHPDT", "CY1TMPT", "CYND", "CYNDSP", "CYDT", "CYTM"), cy3.CSV = c("project", 
"Subject", "Site", "InstanceName", "RecordPosition", "CYSHPYN", 
"CYSHPDT", "CY3TMPT", "CYND", "CYNDSP", "CYDT", "CYTM"), cy6.CSV = c("project", 
"Subject", "Site", "InstanceName", "RecordPosition", "CYSHPYN", 
"CYSHPDT", "CY1TMPT", "CYND", "CYNDSP", "CYDT", "CYTM"), dlt.CSV = c("project", 
"Subject", "Site", "InstanceName", "RecordPosition", "DLTYN", 
"DLTAE", "DLTSP"), dm.CSV = c("project", "Subject", "Site", "InstanceName", 
"RecordPosition", "BRTHYR", "DMAGE", "SEX", "SEXSP", "FEMCBP", 
"FEMCBPSP", "RACE", "RACESP", "ETHNIC"), dov.CSV = c("project", 
"Subject", "Site", "InstanceName", "RecordPosition", "DOVDT", 
"DOVAE", "DOVCM", "DOVCP"), dov_1.CSV = c("project", "Subject", 
"Site", "InstanceName", "RecordPosition", "DOVDT"), ds.CSV = c("project", 
"Subject", "Site", "InstanceName", "RecordPosition", "DSDT", 
"DSREAS", "DSORTH", "DSWCSP"), ds_1.CSV = c("project", "Subject", 
"Site", "InstanceName", "RecordPosition", "DSDT", "DSREAS", "DSWCSP", 
"DSORTH"), dth.CSV = c("project", "Subject", "Site", "InstanceName", 
"RecordPosition", "DTHFCDT", "DTHDT", "DTHDUR", "DTHREAS", "DTHROTH", 
"DTHCOMM"), dv.CSV = c("project", "Subject", "Site", "InstanceName", 
"RecordPosition", "DVYN", "DVVIS", "DVIDDAT", "DVSTDAT", "DVENDAT", 
"DVCAT", "DVCATSP", "DVCATCD", "DVTERM", "REWFLAG", "REWCOMP", 
"DVACN", "DVMETRPT", "DVCLSDAT", "DVCLS"), tegu.CSV = c("project", 
"Subject", "Site", "InstanceName", "RecordPosition", "EGYN", 
"EGDT", "EGNOU", "EGTM", "EGORRES", "EGHR", "EGPR", "EGQRS", 
"EGQTINT", "ECGRR", "EGQTCFC", "EGQTCBC", "EGQTCNS", "EGQTCO", 
"EGQTCOSP", "EGRSAB01", "EGRSAB02", "EGRSAB03", "EGRSAB04", "EGRSAB05", 
"EGRSAB06", "EGRSAB07", "EGRSAB08", "EGRSAB09", "EGRSAB10", "EGRSAB11", 
"EGRSAB12", "EGRSAB13", "EGABNCOM", "EGABNCS", "EGTMPT", "EGND"
), tegu_1.CSV = c("project", "Subject", "Site", "InstanceName", 
"RecordPosition", "EGYN", "EGNOU", "EGND", "EGTMPT", "EGDT", 
"EGTM", "EGORRES", "EGHR", "EGPR", "EGQRS", "EGQTINT", "ECGRR", 
"EGQTCFC", "EGQTCBC", "EGQTCNS", "EGQTCO", "EGQTCOSP", "EGRSAB01", 
"EGRSAB02", "EGRSAB03", "EGRSAB04", "EGRSAB05", "EGRSAB06", "EGRSAB07", 
"EGRSAB08", "EGRSAB09", "EGRSAB10", "EGRSAB11", "EGRSAB12", "EGRSAB13", 
"EGABNCOM", "EGABNCS"))

Est-il possible de trier chaque col par AZ. Il n'y a pas de relation col par col. Cette liste utilise cbind créé. Le code pour construire cette liste est

lst1 <- lapply(mget(ls(pattern = "*.CSV")), names)
mx <- max(lengths(lst1))
do.call(cbind, lapply(lst1, `length<-`, mx))

Pourrions-nous trier directement le .CSV dans la liste, ou nous devons apporter des modifications pendant que nous construisons la liste? Et comment?

Actuellement, la liste ressemble à

La liste finale ressemblera à ceci:

Merci

Réponses

1 akrun Nov 24 2020 at 20:39

On boucle sur list, sortles éléments, puis attribuer la lengthà celle de « mx », et remettre le joint NA triée « x1 »

lst1 <- lapply(lst1, function(x) {
          x1 <- sort(x)
          length(x1) <- mx
           x1})

Si nous voulons ordonner les colonnes des données en fonction des noms, alors

lst2 <- lapply(mget(ls(pattern = "*.CSV")), function(x) {
           x[sort(names(x))]
         })