[R] how can I convert a long to wide matrix?

Marna Wagley m@rn@@w@g|ey @end|ng |rom gm@||@com
Wed May 2 01:16:59 CEST 2018


Hi Jim,
The data set is correct. I took two readings from the "SITE A" within a
short time interval, therefore I want to take the first value if there are
repeated within a same group of "timeGroup".
Therefore I wanted following

FinalData1
         B1    B2
id_X   "A"   "B"
id_Y   "A"   "B"

thanks,



On Tue, May 1, 2018 at 4:05 PM, Jim Lemon <drjimlemon using gmail.com> wrote:

> Hi Marna,
> I think this is due to having three rows for id_X and only two for
> id_Y. The function creates a data frame with enough columns to hold
> the greatest number of values for each ID variable. Notice that the
> SITE_n columns contain three values for id_X (A, A, B) and two for
> id_Y (A, B, NA) as there was no third occasion of measurement for the
> latter. Even though there are only two _values_ for SITE, there must
> be enough space for three. In your desired output, SITE for the second
> occasion of measurement is wrong (it should be "A"), and for the third
> occasion it is unknown. Even if there was only one value for SITE in
> the original data frame, it should be repeated for the correct number
> of observations. I think you may be mixing up case ID with location of
> observation.
>
> Jim
>
>
> On Wed, May 2, 2018 at 8:48 AM, Marna Wagley <marna.wagley using gmail.com>
> wrote:
> > Hi Jim,
> > Thank you very much for your suggestions. I used it but it gave me three
> > sites. But actually I do have only two sites "Id_X" and "Id_y" . In fact
> > "A" is repeated two times for "Id_X". If it is repeated, I would like to
> > take the first one among many repeated values.
> >
> > dat<-structure(list(ID = structure(c(1L, 1L, 1L, 2L, 2L), .Label =
> c("id_X",
> >
> > "id_Y"), class = "factor"), EventDate = structure(c(4L, 5L, 2L,
> >
> > 3L, 1L), .Label = c("9/15/16", "9/15/17", "9/7/16", "9/8/16",
> >
> > "9/9/16"), class = "factor"), timeGroup = structure(c(1L, 1L,
> >
> > 2L, 1L, 2L), .Label = c("B1", "B2"), class = "factor"), SITE =
> > structure(c(1L,
> >
> > 1L, 2L, 1L, 2L), .Label = c("A", "B"), class = "factor")), .Names =
> c("ID",
> >
> > "EventDate", "timeGroup", "SITE"), class = "data.frame", row.names =
> c(NA,
> >
> > -5L))
> >
> > library(prettyR)
> >
> > stretch_df(dat,idvar="ID",to.stretch=c("EventDate","SITE"))
> >
> >
> > ID timeGroup EventDate_1 EventDate_2 EventDate_3 SITE_1 SITE_2 SITE_3
> > 1 id_X        B1      9/8/16      9/9/16     9/15/17      A      A      B
> > 2 id_Y        B1      9/7/16     9/15/16        <NA>      A      B   <NA>
> >>
> >
> > Basically I am looking for like following table
> >
> > ID timeGroup EventDate_1 EventDate_2 EventDate_3 SITE_1 SITE_2
> > 1 id_X        B1      9/8/16      9/9/16     9/15/17      A      B
> > 2 id_Y        B1      9/7/16     9/15/16        <NA>      A      B
> >
> > Thanks
> >
> >
> > On Tue, May 1, 2018 at 3:32 PM, Jim Lemon <drjimlemon using gmail.com> wrote:
> >>
> >> Hi Marna,
> >> Try this:
> >>
> >> library(prettyR)
> >> stretch_df(dat,idvar="ID",to.stretch=c("EventDate","SITE"))
> >>
> >> Jim
> >>
> >>
> >> On Wed, May 2, 2018 at 8:24 AM, Marna Wagley <marna.wagley using gmail.com>
> >> wrote:
> >> > Hi R user,
> >> > I was trying to convert a long matrix to wide? I have an example and
> >> > would
> >> > like to get a table (FinalData1):
> >> >
> >> >
> >> > FinalData1
> >> >          B1    B2
> >> > id_X   "A"   "B"
> >> > id_Y   "A"   "B"
> >> >
> >> > but I got the following table using the following code.
> >> >
> >> > FinalData1
> >> >
> >> >      B1  B2
> >> >
> >> > id_X "A" "A"
> >> >
> >> > id_Y "A" "B"
> >> >
> >> >
> >> > the code and the example data I used are given below. Is there any
> >> > suggestions to fix the problem?
> >> >
> >> >
> >> > dat<-structure(list(ID = structure(c(1L, 1L, 1L, 2L, 2L), .Label =
> >> > c("id_X",
> >> >
> >> >
> >> > "id_Y"), class = "factor"), EventDate = structure(c(4L, 5L, 2L,
> >> >
> >> > 3L, 1L), .Label = c("9/15/16", "9/15/17", "9/7/16", "9/8/16",
> >> >
> >> > "9/9/16"), class = "factor"), timeGroup = structure(c(1L, 1L,
> >> >
> >> > 2L, 1L, 2L), .Label = c("B1", "B2"), class = "factor"), SITE =
> >> > structure(c(
> >> > 1L,
> >> >
> >> > 1L, 2L, 1L, 2L), .Label = c("A", "B"), class = "factor")), .Names =
> >> > c("ID",
> >> >
> >> > "EventDate", "timeGroup", "SITE"), class = "data.frame", row.names =
> >> > c(NA,
> >> >
> >> > -5L))
> >> >
> >> >
> >> > tmp <- split(dat, dat$ID)
> >> >
> >> > tmp1 <- do.call(rbind, lapply(tmp, function(dat){
> >> >
> >> > tb <- table(dat$timeGroup)
> >> >
> >> > idx <- which(tb>0)
> >> >
> >> > tb1 <- replace(tb, idx, as.character(dat$SITE))
> >> >
> >> > }))
> >> >
> >> >
> >> > tmp1
> >> >
> >> > FinalData<-print(tmp1, quote=FALSE)
> >> >
> >> >         [[alternative HTML version deleted]]
> >> >
> >> > ______________________________________________
> >> > R-help using r-project.org mailing list -- To UNSUBSCRIBE and more, see
> >> > 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]]




More information about the R-help mailing list