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 at 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 at 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 at 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]]
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 at 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 at 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 at 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 at 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. > >
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 at 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 at 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 at 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 at 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 at 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]]