[R] Data frames

Liaw, Andy andy_liaw at merck.com
Mon Apr 25 12:40:53 CEST 2005


> From: Eric Lecoutre
> 
> > I have two questions about data frames:
> > 
> > (1) How can one extract a simple matrix
> > from a data frame? I tried
> > 
> >       Matrixfromdf = function (frame,without=1)
> >       {a=frame[colnames(frame)[-without]]
> >       v=unlist(a,use.names=F)
> >       matrix(v,ncol=ncol(a))}
> > 
> > but it works well only for without=1,
> > perhaps also because the function in (2)
> > gives probably a different meaning to
> > the first column.
> 
> 
> ?as.matrix
> data(iris)
> as.matrix(iris[,-5]) # numeric
> as.matrix(iris[,-1]) # character

data.matrix() might be a safer choice...
 
> > (2) How does one define a void data frame
> > with only column names but no values?
> > I tried this indirect way:
> > 
> >      # Void df with titles from ...
> >      Newvoid = function (...)
> >      {a=c(...); m=length(a)
> >      titles=paste(a,collapse=' ')
> >      conn=textConnection(titles)
> >      tab=read.table(conn,header=T)
> >      close(conn); tab}
> 
> Basically, you have to create the sctruture by providing one 
> observation
> This will allow you to specify the classes of the variables.
> 
> > data.frame(list(x=1,y="character"))[-1,]
> [1] x y
> <0 rows> (or 0-length row.names)

If the columns are all numerics, you can create a matrix with the appriate
column names and 0 rows, then coerce to data frame:

emptyData <- function(varNames) {
    m <- matrix(numeric(0), ncol=length(varNames),
                dimnames=list(NULL, varNames))
    as.data.frame(m)
}

Yet another possibility is to construct the 0-row data frame
directly by giving 0-length named arguments to data.frame().

Andy

> 
> Eric
> 
> ______________________________________________
> R-help at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-help
> PLEASE do read the posting guide! 
> http://www.R-project.org/posting-guide.html
> 
> 
>




More information about the R-help mailing list