[R] how to rearrange a dataframe

David Winsemius dwinsemius at comcast.net
Wed Feb 24 00:25:57 CET 2010


On Feb 23, 2010, at 4:27 PM, Laura Rodriguez Murillo 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.

Seems as though there should be a swap function or a fancy indexing  
solution that would do this but I am not coming up with anything  
particularly terse. Here is a beginning. You could assign these  
vectors to new columns (perhaps after (re-)making them numeric ) and  
delete the old columns if you needed to. Say your dataframe were  
called "ta":

 > apply(ta, 1, function(x) ifelse( (x[1]==1 & x[2]=="-")|(x[1]==2 &  
x[2]=="+"), c(x[6],x[4]), c(x[4],x[6]) ))
[1] " 1" "10" "56" "98"
 > apply(ta, 1, function(x) ifelse( (x[1]==1 & x[2]=="-")|(x[1]==2 &  
x[2]=="+"), c(x[4],x[6]) , c(x[6],x[4])))
[1] " 3" " 5" "93" "65"

-- 
David.
>
> 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