Hi You can use outer. If your data are in data frame test then
DIFF <- as.vector(t(outer(test$val, test$val, "-"))) returns a vector, You just need to add suitable names to rows. CASE <- as.vector(t(outer(test$ID, test$ID, paste, sep="-"))) data.frame(CASE, DIFF) will put it together. Regards Petr r-help-boun...@r-project.org napsal dne 23.09.2009 16:42:45: > Alessandro Carletti wrote: > > > > Hi, > > I have a problem. > > I have a data frame looking like: > > > > ID val > > > > A? .3 > > B? 1.2 > > C? 3.4 > > D? 2.2 > > E? 2.0 > > > > I need to CREATE the following TABLE: > > > > CASE?? DIFF > > > > A-A??? 0 > > A-B??? -0.9 > > A-C??? -3.1 > > A-D??? -1.9 > > A-E??? -1.7 > > B-A??? ... > > B-B??? ... > > B-C > > B-D > > B-E > > C-A > > ... > > > > WHERE CASE IS THE COUPLE OF ELEMENTS CONSIDEREDM AND DIFF IS THE > computed DIFFERENCE between their values. > > > > Could you give me suggestions? > > > > Solution: > > Besides the suggestions given by others, you can use the sqldf package > to do this (leveraging knowledge in SQL if you know SQL). If you join > your data frame with itself, without a join condition, you will get the > Cartesian product of the two data frames, which seems to be exactly what > you need. A warning is in order. Generally when you join 2 (or more) > data frames you DO NOT want the Cartesian product by want to join the > data frames by some key. The solution to your particular problem, > however, can be implemented easily using the Cartesian product. > > > > mydata <- data.frame(id=rep(c('A','B','C','D','E'), each=2), > val=sample(1:5, 10, replace=T)) > > mydata > > library(sqldf) > > # merge data frame with itself to create a Cartesian Product - this is > normally NOT what you want. > > # Note 'case' is a key word in SQL so I use cases for the variable name. > Likewise diff is a used in R so I use diffr > > mydata2 <- sqldf("select a.id as id1, a.val as val1, b.id as id2, b.val > as val2, a.id || ' - ' || b.id as cases, > > a.val - b.val as diffr from mydata a, mydata b") > > dim(mydata2) # check dimensions of the merged dataset > > head(mydata2) # examine the first 6 records > > # if you want only the columns casses and diffr, then use this SQL code > > mydata3 <- sqldf("select a.id || ' - ' || b.id as cases, a.val - b.val > as diffr from mydata a, mydata b") > > dim(mydata3) # check dimensions of the merged dataset > > head(mydata3) # examine the first 6 records > > > > Hope this helps. > > > > Jude > > ___________________________________________ > Jude Ryan > Director, Client Analytical Services > Strategy & Business Development > UBS Financial Services Inc. > 1200 Harbor Boulevard, 4th Floor > Weehawken, NJ 07086-6791 > Tel. 201-352-1935 > Fax 201-272-2914 > Email: jude.r...@ubs.com > > > > Please do not transmit orders or instructions regarding a UBS > account electronically, including but not limited to e-mail, > fax, text or instant messaging. The information provided in > this e-mail or any attachments is not an official transaction > confirmation or account statement. For your protection, do not > include account numbers, Social Security numbers, credit card > numbers, passwords or other non-public information in your e-mail. > Because the information contained in this message may be privileged, > confidential, proprietary or otherwise protected from disclosure, > please notify us immediately by replying to this message and > deleting it from your computer if you have received this > communication in error. Thank you. > > UBS Financial Services Inc. > UBS International Inc. > UBS Financial Services Incorporated of Puerto Rico > UBS AG > > > UBS reserves the right to retain all messages. Messages are protected > and accessed only in legally justified > cases.______________________________________________ > R-help@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. ______________________________________________ R-help@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.