rperformance-testingdata-wranglinglasso-regressionreformatting

How to convert a row of binary indicators into a row of distinct (nominal) labelled Variables selected by a LASSO


I have a set of candidate regressors (aka Independent Variables or 'IVs') which has been selected by a LASSO Regression I just ran in the following form:

True_IVs
  X1 X2 X3 X4 X5 X6 X7 X8 X9 X10 X11 X12 X13 X14 X15 X16 X17 X18 X19 X20
1  0  0  0  1  0  0  0  0  0   1   0   0   1   0   0   0   0   0   1   1
  X21 X22 X23 X24 X25 X26 X27 X28 X29 X30
1   0   1   0   0   1   1   1   1   0   1

dput(True_IVs)
structure(list(X1 = "0", X2 = "0", X3 = "0", X4 = "1", X5 = "0", 
    X6 = "0", X7 = "0", X8 = "0", X9 = "0", X10 = "1", X11 = "0", 
    X12 = "0", X13 = "1", X14 = "0", X15 = "0", X16 = "0", X17 = "0", 
    X18 = "0", X19 = "1", X20 = "1", X21 = "0", X22 = "1", X23 = "0", 
    X24 = "0", X25 = "1", X26 = "1", X27 = "1", X28 = "1", X29 = "0", 
    X30 = "1"), row.names = 1L, class = "data.frame")

Where True_IVs is a "data.frame" and its structure is:

'data.frame':   1 obs. of  30 variables:
 $ X1 : chr "0"
 $ X2 : chr "0"
 $ X3 : chr "0"
 $ X4 : chr "1"
 $ X5 : chr "0"
 $ X6 : chr "0"
 $ X7 : chr "0"
.
.
.
 $ X27: chr "1"
 $ X28: chr "1"
 $ X29: chr "0"
 $ X30: chr "1"

And I would like to convert this output into something equivalent to whatever will produce the following output in the Console to facilitate the scoring of these selections:

True_Regressors
[1] "X4" "X10" "X13" "X19" "X20" "X22" "X25" "26" "X27" "X28" "30"

Just to clarify, the above is not actual code but psuedo code of the form I wish to create.

So far, all I have tried is what is below with the corresponding output in the Console:

 True_Regressors <- do.call(
   rbind.data.frame,
   lapply(
   paste("X", True_IVs),
     function(x) {
       s <- paste(x, "")
       c(s[[1]], s[[2]]) } ))

#Error in s[[2]] : subscript out of bounds

Solution

  • You can simply do:

    names(True_IVs)[True_IVs == 1]