Hi everybody! I'm sure that I overlook something and feel quite stupid to ask, but I have not found an easy solution to the following problem: Take e.g. the Orthodont data from the nlme package:> head(Orthodont)Grouped Data: distance ~ age | Subject distance age Subject Sex 1 26.0 8 M01 Male 2 25.0 10 M01 Male 3 29.0 12 M01 Male 4 31.0 14 M01 Male 5 21.5 8 M02 Male 6 22.5 10 M02 Male Suppose now, that I have a vector which contains the names of the "meta"-fields in this data-frame: metaFields <- c("Subject", "Sex") I now would like to form a new column "ID" which consists of the columns in metaFields joined like the following:> head(Orthodont)Grouped Data: distance ~ age | Subject distance age Subject Sex ID 1 26.0 8 M01 Male M01/Male 2 25.0 10 M01 Male M01/Male 3 29.0 12 M01 Male M01/Male 4 31.0 14 M01 Male M01/Male 5 21.5 8 M02 Male M02/Male 6 22.5 10 M02 Male M02/Male Any paste commands I tried so far ?failed, e.g.: Orthodont$ID <- paste(Orthodont[,metaFields], sep="/") is simply wrong. Ok, I could add the columns within a loop to ID, but that is not very elegant. Instead, what I need is a command that in effect produces the output of Orthodont$ID <- paste(Orthodont[,metaFields[1]], Orthodont[,metaFields[2]] , sep="/") There should be some way to do it in R - can someone please enlighten me? Thanks a lot in advance. Greetings, Sebastian
try this: data("Orthodont", package = "nlme") metaFields <- c("Subject", "Sex") Orthodont$ID <- do.call("paste", c(Orthodont[metaFields], sep = "/")) I hope it helps. Best, Dimitris ---- Dimitris Rizopoulos Biostatistical Centre School of Public Health Catholic University of Leuven Address: Kapucijnenvoer 35, Leuven, Belgium Tel: +32/(0)16/336899 Fax: +32/(0)16/337015 Web: http://med.kuleuven.be/biostat/ http://perswww.kuleuven.be/dimitris_rizopoulos/ ----- Original Message ----- From: "Sebastian Weber" <sebastian.weber at physik.tu-darmstadt.de> To: <r-help at r-project.org> Sent: Friday, July 18, 2008 9:36 AM Subject: [R] column wise paste of data.frames> Hi everybody! > > I'm sure that I overlook something and feel quite stupid to ask, but > I > have not found an easy solution to the following problem: Take e.g. > the > Orthodont data from the nlme package: > >> head(Orthodont) > Grouped Data: distance ~ age | Subject > distance age Subject Sex > 1 26.0 8 M01 Male > 2 25.0 10 M01 Male > 3 29.0 12 M01 Male > 4 31.0 14 M01 Male > 5 21.5 8 M02 Male > 6 22.5 10 M02 Male > > Suppose now, that I have a vector which contains the names of the > "meta"-fields in this data-frame: > > metaFields <- c("Subject", "Sex") > > I now would like to form a new column "ID" which consists of the > columns > in metaFields joined like the following: > >> head(Orthodont) > Grouped Data: distance ~ age | Subject > distance age Subject Sex ID > 1 26.0 8 M01 Male M01/Male > 2 25.0 10 M01 Male M01/Male > 3 29.0 12 M01 Male M01/Male > 4 31.0 14 M01 Male M01/Male > 5 21.5 8 M02 Male M02/Male > 6 22.5 10 M02 Male M02/Male > > Any paste commands I tried so far ?failed, e.g.: > > Orthodont$ID <- paste(Orthodont[,metaFields], sep="/") > > is simply wrong. Ok, I could add the columns within a loop to ID, > but > that is not very elegant. Instead, what I need is a command that in > effect produces the output of > > Orthodont$ID <- paste(Orthodont[,metaFields[1]], > Orthodont[,metaFields[2]] , sep="/") > > There should be some way to do it in R - can someone please > enlighten > me? Thanks a lot in advance. > > Greetings, > > Sebastian > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide > http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >Disclaimer: http://www.kuleuven.be/cwis/email_disclaimer.htm
do.call('paste', c(data.frame(letters, LETTERS), list(sep='/'))) Patrick Burns patrick at burns-stat.com +44 (0)20 8525 0696 http://www.burns-stat.com (home of S Poetry and "A Guide for the Unwilling S User") Sebastian Weber wrote:> Hi everybody! > > I'm sure that I overlook something and feel quite stupid to ask, but I > have not found an easy solution to the following problem: Take e.g. the > Orthodont data from the nlme package: > > >> head(Orthodont) >> > Grouped Data: distance ~ age | Subject > distance age Subject Sex > 1 26.0 8 M01 Male > 2 25.0 10 M01 Male > 3 29.0 12 M01 Male > 4 31.0 14 M01 Male > 5 21.5 8 M02 Male > 6 22.5 10 M02 Male > > Suppose now, that I have a vector which contains the names of the > "meta"-fields in this data-frame: > > metaFields <- c("Subject", "Sex") > > I now would like to form a new column "ID" which consists of the columns > in metaFields joined like the following: > > >> head(Orthodont) >> > Grouped Data: distance ~ age | Subject > distance age Subject Sex ID > 1 26.0 8 M01 Male M01/Male > 2 25.0 10 M01 Male M01/Male > 3 29.0 12 M01 Male M01/Male > 4 31.0 14 M01 Male M01/Male > 5 21.5 8 M02 Male M02/Male > 6 22.5 10 M02 Male M02/Male > > Any paste commands I tried so far ?failed, e.g.: > > Orthodont$ID <- paste(Orthodont[,metaFields], sep="/") > > is simply wrong. Ok, I could add the columns within a loop to ID, but > that is not very elegant. Instead, what I need is a command that in > effect produces the output of > > Orthodont$ID <- paste(Orthodont[,metaFields[1]], > Orthodont[,metaFields[2]] , sep="/") > > There should be some way to do it in R - can someone please enlighten > me? Thanks a lot in advance. > > Greetings, > > Sebastian > > ______________________________________________ > R-help at r-project.org mailing list > https://stat.ethz.ch/mailman/listinfo/r-help > PLEASE do read the posting guide http://www.R-project.org/posting-guide.html > and provide commented, minimal, self-contained, reproducible code. >