[R] how to rearrange a dataframe

Tom Short tshort.rlists at gmail.com
Wed Feb 24 01:28:37 CET 2010


Try this:

a <- b <- read.table(textConnection("
1 + name1 1 2 3
2 + name2 5 9 10
2 - name3 56 74 93
1 - name4 65 75 98"), skip=1, header=FALSE)

swapidx <- with(a, (V1 == 2 & V2 == "+") | (V1 == 1 & V2 == "-"))
b[swapidx,] <- b[swapidx, c(1:3,6:4)]

This creates an indexing vector that identifies which rows to swap,
then the 6:4 flips around the fourth through sixth columns.

- Tom

On Tue, Feb 23, 2010 at 5:27 PM, Laura Rodriguez Murillo
<laura.lmurillo at gmail.com> wrote:
> Hi all,
>
> I'd appreciate if anyone can help me with this...
>
> I have a data frame that looks like this:
>
> 1 + name1 1 2 3
> 2 + name2 5 9 10
> 2 - name3 56 74 93
> 1 - name4 65 75 98
>
> I need to rearrange this in a way so that the rows with  "1" in the
> first column, and "-" in the second column; then columns 4 and 6
> should switch places. That is, column 6 would be now column 4 and
> column 4 would be column 6 (column 5 should stay as column 5)
> In the same way, if the first column is "2" and the second is "+",
> then the same rearrangement should be done.
> Rows with the first two entries 1 + or 2 - should stay in the same order.
> This should be done for each row independently.
>
> Thanks a lot for your help!
>
> ______________________________________________
> 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