Re: [R] Help

From: Christoph Buser <buser_at_stat.math.ethz.ch>
Date: Fri 28 Jul 2006 - 19:13:00 EST

Dear Claire

Thank you for providing an example, but it is not totally clear to me how you want to transform your data. For example in row 1, you have value 1 in column f and n, but the results after transformation are not similar "A G" and "A A". Similar problem for column h and i. They transform both to "G G" although the original values 0,2 differ?

Furthermore it is not clear if you want to have a vector with two elements as result of the transformation -> "A" "G" or one character "A G".
In the first case you cannot work with data.frames or matrices, but you must use a list. An entry of a data.frame is always a single element.

Regarding changing elements if they fulfil a condition, it is not necessary to work with loops. E.g. for a vector

v[v==5] <- 7

changes all values of v which are 5 to 7. Please read "An Introduction to R" on the R home page about indexing vectors, matrices, and so on.

The following code can show you an example how I understood your problem and one possible solution. I hope it helps you.

## Create data.frame

DF <- data.frame(a = c(14,58), b = c(24,42), c = c("rcvf", "grde"),
                 d = c("AG","AC"), e = c(5,2), f = c(2,5), g = c(1,0),
                 h = c(0,5), i = c(2,1), n = c(1,0))
## work with matrix to avoid problems with factors DF <- as.matrix(DF)
## transformation function
myfun <- function(v)
{
  v[v=="5"] <- "00"
  v[v=="1"] <- v["d"]
  v[v=="0"] <- paste(rep(substr(v["d"],1,1), 2), collapse = "")
  v[v=="2"] <- paste(rep(substr(v["d"],2,2), 2), collapse = "")
  v
}
## apply transformation function to all rows result <- t(apply(DF, 1, myfun))

One final point. Providing examples is a good way to obtain fast help from others. Could you please try to give some R-code in the example as well to ease the handling for others, e.g. if you provide an example data.frame, please include the code to produce it:

## Create data.frame

DF <- data.frame(a = c(14,58), b = c(24,42), c = c("rcvf", "grde"),
                 d = c("AG","AC"), e = c(5,2), f = c(2,5), g = c(1,0),
                 h = c(0,5), i = c(2,1), n = c(1,0))

Have a nice week and enjoy further working with R.

Regards,

Christoph Buser



Christoph Buser <buser@stat.math.ethz.ch> Seminar fuer Statistik, LEO C13
ETH Zurich	8092 Zurich	 SWITZERLAND
phone: x-41-44-632-4673		fax: 632-1228

http://stat.ethz.ch/~buser/

claire pujoll writes:
> Dear R members,
>
> Sorry for this question. I have a dataframe (please see the example) and i
> should do the following transformation:
>
> DF
> a b c d e f g h i n
> 14 24 rcvf AG 5 2 1 0 2 1
> 58 42 grde AC 2 5 0 5 1 0
>
>
> I should transforme my DF like :
>
> a b c d e f g h i n
> 14 24 rcvf A G 0 0 G G A G G G G G A A
> 58 42 grde A C C C 0 0 A A 0 0 A C A A
>
> i.e: when DF[i,j]==5 => DF[i,j] <- 0 0
> When DF[i,j] == k (!=0) i should look to d column to do the
> transormation
>
> DF is 200000 * 10000 so i cant use loops.
>
> Thanks for your help,
> Claire
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> R-help@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
> and provide commented, minimal, self-contained, reproducible code.



R-help@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 and provide commented, minimal, self-contained, reproducible code. Received on Fri Jul 28 19:21:23 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Fri 28 Jul 2006 - 20:19:21 EST.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.