[R] question: data.frame data conversion

Brijesh Gulati brijgul at gmail.com
Sun Aug 4 21:34:12 CEST 2013


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:ruipbarradas at sapo.pt] 
Sent: Sunday, August 04, 2013 1:57 PM
To: Brijesh Gulati
Cc: r-help at 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 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.
>



More information about the R-help mailing list