Dear R helpers Suppose I have a data frame as given below mydat = data.frame(x = c(1,1,1, 2, 2, 2, 2, 2, 5, 5, 6), y = c(10, 10, 10, 8, 8, 8, 7, 7, 2, 2, 4)) mydat x y 1 1 10 2 1 10 3 1 10 4 2 8 5 2 8 6 2 8 7 2 7 8 2 7 9 5 2 10 5 2 11 6 4 unique(mydat$x) will give me 1, 2, 5, 6 i.e. 4 values and unique(mydat$y) will give me 10, 8, 7, 2, 4. What I need is a data frame where I will get a vector (say) x_new as (1, 2, 2, 5, 6) and corresponding y_new as (10, 8, 7, 2, 4). I need to use these two vectors viz. x_new and y_new seperately for further processing. They may be under same data frame say mydat_new but I should be able to access them as mydat_new$x_new and similarly for y. I tried following way. pp = paste(mydat$x, mydat$y) pp = > pp [1] "1 10" "1 10" "1 10" "2 8" "2 8" "2 8" "2 7" "2 7" "5 2" "5 2" "6 4" qq = unique(pp)
Hi: This problem came up the other day - see http://stats.stackexchange.com/questions/7884/fast-ways-in-r-to-get-the-first-row-of-a-data-frame-grouped-by-an-identifier/7985#7985 Dennis On Sat, Mar 12, 2011 at 3:20 AM, Vincy Pyne <vincy_pyne@yahoo.ca> wrote:> Dear R helpers > > Suppose I have a data frame as given below > > mydat = data.frame(x = c(1,1,1, 2, 2, 2, 2, 2, 5, 5, 6), y = c(10, 10, 10, > 8, 8, 8, 7, 7, 2, 2, 4)) > > > mydat > x y > 1 1 10 > 2 1 10 > 3 1 10 > 4 2 8 > 5 2 8 > 6 2 8 > 7 2 7 > 8 2 7 > 9 5 2 > 10 5 2 > 11 6 4 > > unique(mydat$x) will give me 1, 2, 5, 6 i.e. 4 values and > unique(mydat$y) will give me 10, 8, 7, 2, 4. > > What I need is a data frame where I will get a vector (say) x_new as (1, 2, > 2, 5, 6) and corresponding y_new as (10, 8, 7, 2, 4). I need to use these > two vectors viz. x_new and y_new seperately for further processing. They may > be under same data frame say mydat_new but I should be able to access them > as mydat_new$x_new and similarly for y. > > I tried following way. > > pp = paste(mydat$x, mydat$y) > > pp = > pp > [1] "1 10" "1 10" "1 10" "2 8" "2 8" "2 8" "2 7" "2 7" "5 2" "5 2" > "6 4" > > qq = unique(pp) > > > qq > [1] "1 10" "2 8" "2 7" "5 2" "6 4" > > So I get the desired pairs, but I want each element of pair in two columns > seperately as > > x_new y_new > > 1 10 > 2 8 > 2 7 > 5 2 > 6 4 > > Kindly guide > > Vincy > > > > > [[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. > >[[alternative HTML version deleted]]
On Sat, Mar 12, 2011 at 03:20:01AM -0800, Vincy Pyne wrote:> Dear R helpers > > Suppose I have a data frame as given below > > mydat = data.frame(x = c(1,1,1, 2, 2, 2, 2, 2, 5, 5, 6), y = c(10, 10, 10, 8, 8, 8, 7, 7, 2, 2, 4)) >[...]> > unique(mydat$x) will give me 1, 2, 5, 6? i.e. 4 values and > unique(mydat$y) will give me 10, 8, 7, 2, 4. > > What I need is a data frame where I will get a vector (say) x_new as (1, 2, 2, 5, 6) and corresponding y_new as (10, 8, 7, 2, 4). I need to use these two vectors viz. x_new and y_new seperately for further processing. They may be under same data frame say mydat_new but I should be able to access them as mydat_new$x_new and similarly for y. > > I tried following way. > > pp = paste(mydat$x, mydat$y) > > pp = > pp > ?[1] "1 10" "1 10" "1 10" "2 8"? "2 8"? "2 8"? "2 7"? "2 7"? "5 2"? "5 2"? "6 4" > > qq = unique(pp) > > > qq > [1] "1 10" "2 8"? "2 7"? "5 2"? "6 4"Hi. If i understand you correctly, then the solution is easy, since function unique() can handle also rows of a data frame. Is the following, what you expect? unique(mydat) x y 1 1 10 4 2 8 7 2 7 9 5 2 11 6 4 Petr Savicky.