You could also try: z$id<-with(z,ave(x,x,FUN=seq)) library(reshape2)
dcast(z,id~x,value.var="y")[-1] # a b c #1 1.0 1.01 2 #2 1.2 1.03 3 #3 1.1 1.00 NA A.K. ----- Original Message ----- From: Rui Barradas <ruipbarra...@sapo.pt> To: Brijesh Gulati <brij...@gmail.com> Cc: r-help@r-project.org Sent: Sunday, August 4, 2013 3:47 PM Subject: Re: [R] question: data.frame data conversion Hello, You're insisting in as.data.frame(cbind(...)). Don't do that. Just see the difference: z = data.frame(x, y) str(z) 'data.frame': 8 obs. of 2 variables: $ x: Factor w/ 3 levels "a","b","c": 1 1 1 2 2 2 3 3 $ y: num 1 1.2 1.1 1.01 1.03 1 2 3 z2 = as.data.frame(cbind(x,y)) str(z2) 'data.frame': 8 obs. of 2 variables: $ x: Factor w/ 3 levels "a","b","c": 1 1 1 2 2 2 3 3 $ y: Factor w/ 7 levels "1","1.01","1.03",..: 1 5 4 2 3 1 6 7 What happens is that cbind creates a matrix from x and y, converting all to character, and y is no longer numeric. Then as.data.frame converts the strings to factors, the default behavior. As for your question, change fun() to the following. fun <- function(z){ zs <- split(z, x) n <- length(zs) m <- sapply(zs, nrow) id <- unlist(sapply(m, seq_len)) zz <- cbind(id, z) dcast(zz, id ~ x)[-1] } Hope this helps, Rui Barradas Em 04-08-2013 20:34, Brijesh Gulati escreveu: > Hello Rui: Thanks for the solution. It does work to the specification. Just > one follow-up. I get an error if the number of repeating values are > different. For instance, in the following example, "c" is repeated only 2 > times; whereas "a" and "b" three times. I am fine with the output shows NA > for the missing values. Any help would be greatly appreciated. > > x = c("a","a", "a", "b","b","b", "c", "c") > y = c(1.0, 1.2, 1.1, 1.01, 1.03, 1.0, 2.0, 3.0) > z = as.data.frame(cbind(x,y)) > > x y > 1 a 1 > 2 a 1.2 > 3 a 1.1 > 4 b 1.01 > 5 b 1.03 > 6 b 1 > 7 c 2 > 8 c 3 > > -----Original Message----- > From: Rui Barradas [mailto:ruipbarra...@sapo.pt] > Sent: Sunday, August 04, 2013 1:57 PM > To: Brijesh Gulati > Cc: r-help@r-project.org > Subject: Re: [R] question: data.frame data conversion > > Hello, > > First of all, do _not_ create a data frame with > > as.data.frame(cbind(...)) > > Instead, use > > z = data.frame(x, y) > > As for your question, try the following. > > > library(reshape2) > fun <- function(z){ > zs <- split(z, x) > n <- length(zs) > m <- nrow(zs[[1]]) > zz <- cbind(id = rep(1:m, n), z) > dcast(zz, id ~ x)[-1] > } > > fun(z) > > > Hope this helps, > > Rui Barradas > > > Em 04-08-2013 13:49, Brijesh Gulati escreveu: >> Hello, I have a data.frame with repeating rows and corresponding >> value. For instance, "z" will be an example of that. >> >> >> >> x = c("a","a", "a", "b","b","b") >> >> y = c(1.0, 1.2, 1.1, 1.01, 1.03, 1.0) >> >> z = as.data.frame(cbind(x,y)) >> >> >> >>> z >> >> x y >> >> 1 a 1 >> >> 2 a 1.2 >> >> 3 a 1.1 >> >> 4 b 1.01 >> >> 5 b 1.03 >> >> 6 b 1 >> >> >> >> So, you see that "a" and "b" are repeated 3 times and have three >> different value. I would like to convert this data into something like the > following. >> >> >> >> a b >> 1.0 1.01 >> 1.2 1.03 >> 1.1 1.00 >> >> >> >> In the above, repeating rows (a,b) become columns and their values >> show up in their respective column. >> >> Finally, to clarify few things. The number of rows of each repeating >> item (a or b) would be the same and hence, the number of row expected >> in the output shall be the same. >> >> >> >> >> [[alternative HTML version deleted]] >> >> ______________________________________________ >> 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. ______________________________________________ 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.