[R] Retaining attributes of columns of a data frame when subsetting.

Rolf Turner r@turner @end|ng |rom @uck|@nd@@c@nz
Sun Oct 20 02:19:43 CEST 2019

I am writing a function that involves a data frame "X" some columns of 
which have attributes.  I replace X by a data frame with a subset of the 
rows of X:

     X <- X[ok,]

where "ok" is a logical vector.  When I do this the attributes of the 
columns (which I need to retain) are lost (except for the "class" and 
"levels" attributes of columns which are factors).

Is there any sexy way to retain the attributes of the columns?

So far the only approach that I can work out is to extract the 
attributes prior to subsetting and put them back after subsetting.

Like unto:

     SaveAt <- lapply(X,attributes)
     X <- X[ok,]
     lX <- lapply(names(X),function(nm,x,Sat){
                                attributes(x[[nm]]) <- Sat[[nm]]
     names(lX) <- names(X)
     X <- as.data.frame(lX)

This seems to work, but is rather kludgy.  Is there a better way?

Thanks for any pointers.


Rolf Turner

Honorary Research Fellow
Department of Statistics
University of Auckland
Phone: +64-9-373-7599 ext. 88276

More information about the R-help mailing list