Stataq
Stataq

Reputation: 2307

how to sort each object in a list that contain the variable list from multiple data

I have a list

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

Is it possible to sort each col by A-Z. There is no relationship col by col. This is list is using cbind created. The code to build this list is

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

Could we directly sort the .CSV in the list, or we need to make changes while we build the list? And how?

Currently the list looks like

enter image description here

The final list will looks like this:

enter image description here

Thanks

Upvotes: 1

Views: 49

Answers (1)

akrun
akrun

Reputation: 887691

We loop over the list, sort the elements first, then assign the length to that of 'mx', and return the sorted NA appended 'x1'

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

If we want to order the columns of the data based on the names, then

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

Upvotes: 1

Related Questions