I have a data frame with plenty of factor
columns, and these columns have labels explaining what these column names mean ( these have come from reading SAS xport
files and are very useful to understand the columns ). When I convert these factor
columns to character
columns the column-labels are gone, how do we retain them? Same issue in data tables too.
Here is an example to show the behavior:
d1<-data.frame(a=c(1,1,1,2,2),b=c("x1","x1","x2","x2","x3"))
d1$a<-factor(d1$a)
label(d1[["a"]])<-"Identity variable"
label(d1[["b"]])<-"Single letter variable"
label(d1)
a b
"Identity variable" "Single letter variable"
i<-sapply(d1,is.factor)
d1[i]<-lapply(d1[i],as.character,stringsAsFactors=F)
label(d1)
a b
"" "Single letter variable"
How can I retain the labels while converting the columns in both data frames and data tables?
I tried the following based on Michal's suggestion :
`[.avector` <- function(x,i,...) {
r <- NextMethod("[")
mostattributes(r) <- attributes(x)
r
}
d2 <- data.frame( lapply( d1, function(x) {
structure( x, class = c("avector", class(x) ) )
} ) )
i<-sapply(d2,is.factor)
d2[i]<-lapply(d2[i],as.character)
label(d2)
a b
"" "Single letter variable"
Does labels needs to be handled differently from comments?
The labels are attributes.
I found this question that may be useful about preserving attributes. How to delete a row from a data.frame without losing the attributes