thanks for your help I am trying to work around this in R but i have the feeling that this is going to but the center and age next to each other which is not what i need... it might be me not being able to find my head around this but...
i need a table with age as columns and center as rows if deleting row and column names from the main matrix will help i can do that... can i get bit of explanation about how things work ( so i can learn the process) thanks again Natasha ________________________________ From: David Winsemius <dwinsem...@comcast.net> To: Dennis Murphy <djmu...@gmail.com> Sent: Sun, 12 September, 2010 21:18:26 Subject: Re: [R] reshape matrix entities to columns On Sep 12, 2010, at 3:34 PM, Dennis Murphy wrote: > Hi: > > Natasha said: > ******** > I changed it so i hope it will look better now > the matrix is like this: > Age No. Age No. Age No. > Center1 5 2 8 7 > Center2 10 7 20 9 4 10 > column name = sequence of age-no. > > But what I want the data to look like is this > Age > 1 2 3 4 5 6 7 8 9 10 > > 20 > Center1 2 7 > Center2 > 10 7 9 > column name= age of ppl > entries = number of ppl with that age in on center > ********* > > It's a continuation of the reshape problem, but we have to > change the NAs in the reshaped data frame to zeros first: > > df2[is.na(df2)] <- 0 > > xtabs(n ~ center + age, data = df2) > age > center 5 6 7 8 9 10 11 12 13 14 > 1 0 10 0 13 0 9 0 7 0 10 > 2 0 0 12 14 0 0 16 0 0 13 > 3 6 0 0 0 10 0 12 0 9 0 > > How's that? > You've done all the hard work, but the OP wanted the full range of age values from 1:max and that pretty easy to do with one further step that adds entries fo the missing age levels: > df3 <- rbind(df2, data.frame(center=1,time=1, age=1:max(df2$age), n=0)) > xtabs(n ~ center + age, data = df3) age center 1 2 3 4 5 6 7 8 9 10 11 12 13 14 1 0 0 0 0 0 10 0 13 0 9 0 7 0 10 2 0 0 0 0 0 0 12 14 0 0 16 0 0 13 3 0 0 0 0 6 0 0 0 10 0 12 0 9 0 --David. > Dennis > > On Sun, Sep 12, 2010 at 9:46 AM, Dennis Murphy <djmu...@gmail.com> wrote: > >> Hi: >> >> Here's a made up example using the reshape function: >> >> Input data: >> df <- structure(list(center = 1:3, age1 = c(6L, 7L, 5L), n1 = c(10L, >> 12L, 6L), age2 = c(8L, 8L, 8L), n2 = c(13L, 14L, NA), age3 = c(10L, >> 10L, 9L), n3 = c(9L, NA, 10L), age4 = c(12L, 11L, 11L), n4 = c(7L, >> 16L, 12L), age5 = c(14L, 14L, 13L), n5 = c(10L, 13L, 9L)), .Names = >> c("center", >> "age1", "n1", "age2", "n2", "age3", "n3", "age4", "n4", "age5", >> "n5"), class = "data.frame", row.names = c(NA, -3L)) >> >> df >> center age1 n1 age2 n2 age3 n3 age4 n4 age5 n5 >> 1 1 6 10 8 13 10 9 12 7 14 10 >> 2 2 7 12 8 14 10 NA 11 16 14 13 >> 3 3 5 6 8 NA 9 10 11 12 13 9 >> >> # To reshape more than one variable at a time, you need >> # to put the sets of variables into a list, as follows: >> >> df2 <- reshape(df, idvar = 'center', varying = >> list(c(paste('age', 1:5, sep = '')), c(paste('n', 1:5, sep = ''))), >> v.names = c('age', 'n'), times = 1:5, direction = 'long') >> df2 >> center time age n >> 1.1 1 1 6 10 >> 2.1 2 1 7 12 >> 3.1 3 1 5 6 >> 1.2 1 2 8 13 >> 2.2 2 2 8 14 >> 3.2 3 2 8 NA >> 1.3 1 3 10 9 >> 2.3 2 3 10 NA >> 3.3 3 3 9 10 >> 1.4 1 4 12 7 >> 2.4 2 4 11 16 >> 3.4 3 4 11 12 >> 1.5 1 5 14 10 >> 2.5 2 5 14 13 >> 3.5 3 5 13 9 >> >> HTH, >> Dennis >> >> On Sun, Sep 12, 2010 at 7:45 AM, Natasha Asar >> >>> Greeting R helpers J >>> I am not familiar with R but I have to use it to analyze data set that I >>> have >>> (30,000 20,000) >>> I want to change the structure of the dataset and I am wondering how that >>> might >>> be possible in R >>> A main data looks like this: some entities are empty >>> Age No. Age No. Age No. >>> Center1 5 2 8 >>> 7 >>> >>> Center2 10 7 20 >>> 9 4 10 >>> But what I want the data to look like is >>> Age 1 2 3 >>> 4 5 6 7 8 >>> 9 10 > 20 >>> Center1 >>> 2 7 >>> Center2 >>> 10 >>> 7 9 >>> >>> It should read the entities one by one >>> when j is in age column take its value and consider it as the column >>> number for >>> new matrix >>> then go to next entity (j No. columns) and put that entity under the >>> columns >>> number identified in previous step. >>> In other word >>> it should get the each element in No. columns (one by one) and place them >>> in a >>> new matrix under the column number which are equal to entity of age >>> columns of >>> first matrix >>> i have tired ncol, and cbind and things like that but I guess im on the >>> wrong >>> path because it is not working. I am reading this fine with read.csv and >>> writing back the same way. >>> do you know how I can make this work?? Is it even possible to do something >>> like >>> this? >>> Thank you in advance >>> Natasha >>> >>> >>> >>> [[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]] > > ______________________________________________ > 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]] ______________________________________________ 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.