Hello everyone, I want to transform a data.frame into an array (lets call it mydata), where: mydata[[1]] is the first imputed dataset...and for each mydata[[d]], the first p columns are covariates X, and the last one is the outcome Y. Lets assume a simple data.frame: Imputed = data.frame( X1 = c(1,2,1,2,1,2,1,2, 1,2,1,2,1,2,1,2), X2 = c(0,1,0,1,1,1,0,1, 0,1,0,1,1,1,0,1), Y = c(1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8)) The first 8 have been obtained by the first imputation and the later 8 by the 2nd. Can you help me please? Best, ioanna [[alternative HTML version deleted]]
Hello, I am not sure I understand the question, but see if the following is what you want. split(Imputed, cumsum(c(0, diff(Imputed$Y) != 1))) Hope this helps, Rui Barradas On 5/24/2018 3:46 PM, Ioanna Ioannou wrote:> Hello everyone, > > > I want to transform a data.frame into an array (lets call it mydata), where: mydata[[1]] is the first imputed dataset...and for each mydata[[d]], the first p columns are covariates X, and the last one is the outcome Y. > > > Lets assume a simple data.frame: > > > Imputed = data.frame( X1 = c(1,2,1,2,1,2,1,2, 1,2,1,2,1,2,1,2), > > X2 = c(0,1,0,1,1,1,0,1, 0,1,0,1,1,1,0,1), > > Y = c(1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8)) > > The first 8 have been obtained by the first imputation and the later 8 by the 2nd. > > > Can you help me please? > > > Best, > > ioanna > > [[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. >
This is one of those instances where a less superficial knowledge of R's technical details comes in really handy. What you need to do is convert the data frame to a single (numeric) vector for, e.g. a matrix() call. This can be easily done by noting that a data frame is also a list and using do.call(): ## imp is the data frame: do.call(c,imp) X11 X12 X13 X14 X15 X16 X17 X18 X19 X110 X111 X112 X113 X114 1 2 1 2 1 2 1 2 1 2 1 2 1 2 X115 X116 X21 X22 X23 X24 X25 X26 X27 X28 X29 X210 X211 X212 1 2 0 1 0 1 1 1 0 1 0 1 0 1 X213 X214 X215 X216 Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 Y10 1 1 0 1 1 2 3 4 5 6 7 8 1 2 Y11 Y12 Y13 Y14 Y15 Y16 3 4 5 6 7 8 So, e.g. for a 3 column matrix:> matrix(do.call(c,imp), ncol=3)[,1] [,2] [,3] [1,] 1 0 1 [2,] 2 1 2 [3,] 1 0 3 [4,] 2 1 4 [5,] 1 1 5 [6,] 2 1 6 [7,] 1 0 7 [8,] 2 1 8 [9,] 1 0 1 [10,] 2 1 2 [11,] 1 0 3 [12,] 2 1 4 [13,] 1 1 5 [14,] 2 1 6 [15,] 1 0 7 [16,] 2 1 8 Cheers, Bert Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) On Thu, May 24, 2018 at 7:46 AM, Ioanna Ioannou <ii54250 at msn.com> wrote:> Hello everyone, > > > I want to transform a data.frame into an array (lets call it mydata), > where: mydata[[1]] is the first imputed dataset...and for each mydata[[d]], > the first p columns are covariates X, and the last one is the outcome Y. > > > Lets assume a simple data.frame: > > > Imputed = data.frame( X1 = c(1,2,1,2,1,2,1,2, 1,2,1,2,1,2,1,2), > > X2 = c(0,1,0,1,1,1,0,1, > 0,1,0,1,1,1,0,1), > > Y > c(1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8)) > > The first 8 have been obtained by the first imputation and the later 8 by > the 2nd. > > > Can you help me please? > > > Best, > > ioanna > > [[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]]
Why not use as.matrix(Imp) in this case? Regards -- Gerrit Am 24.05.2018 um 17:04 schrieb Bert Gunter:> This is one of those instances where a less superficial knowledge of R's > technical details comes in really handy. > > What you need to do is convert the data frame to a single (numeric) vector > for, e.g. a matrix() call. This can be easily done by noting that a data > frame is also a list and using do.call(): > > ## imp is the data frame: > > do.call(c,imp) > > X11 X12 X13 X14 X15 X16 X17 X18 X19 X110 X111 X112 X113 X114 > 1 2 1 2 1 2 1 2 1 2 1 2 1 2 > X115 X116 X21 X22 X23 X24 X25 X26 X27 X28 X29 X210 X211 X212 > 1 2 0 1 0 1 1 1 0 1 0 1 0 1 > X213 X214 X215 X216 Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 Y10 > 1 1 0 1 1 2 3 4 5 6 7 8 1 2 > Y11 Y12 Y13 Y14 Y15 Y16 > 3 4 5 6 7 8 > > So, e.g. for a 3 column matrix: > >> matrix(do.call(c,imp), ncol=3) > [,1] [,2] [,3] > [1,] 1 0 1 > [2,] 2 1 2 > [3,] 1 0 3 > [4,] 2 1 4 > [5,] 1 1 5 > [6,] 2 1 6 > [7,] 1 0 7 > [8,] 2 1 8 > [9,] 1 0 1 > [10,] 2 1 2 > [11,] 1 0 3 > [12,] 2 1 4 > [13,] 1 1 5 > [14,] 2 1 6 > [15,] 1 0 7 > [16,] 2 1 8 > > Cheers, > Bert > > > > Bert Gunter > > "The trouble with having an open mind is that people keep coming along and > sticking things into it." > -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) > > On Thu, May 24, 2018 at 7:46 AM, Ioanna Ioannou <ii54250 at msn.com> wrote: > >> Hello everyone, >> >> >> I want to transform a data.frame into an array (lets call it mydata), >> where: mydata[[1]] is the first imputed dataset...and for each mydata[[d]], >> the first p columns are covariates X, and the last one is the outcome Y. >> >> >> Lets assume a simple data.frame: >> >> >> Imputed = data.frame( X1 = c(1,2,1,2,1,2,1,2, 1,2,1,2,1,2,1,2), >> >> X2 = c(0,1,0,1,1,1,0,1, >> 0,1,0,1,1,1,0,1), >> >> Y >> c(1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8)) >> >> The first 8 have been obtained by the first imputation and the later 8 by >> the 2nd. >> >> >> Can you help me please? >> >> >> Best, >> >> ioanna >> >> [[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]] > > ______________________________________________ > 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. >
Hello everyone, Thank you for this. Nonetheless it is not exactly want i need. I need mydata[[1]] to provide the values for all 3 variables (Y, X1 and X2) of the first imputation only. As it stands it returns the whole database. Any ideas? Best, ioanna ________________________________ From: Bert Gunter <bgunter.4567 at gmail.com> Sent: 24 May 2018 16:04 To: Ioanna Ioannou Cc: r-help at r-project.org Subject: Re: [R] Manipulation of data.frame into an array This is one of those instances where a less superficial knowledge of R's technical details comes in really handy. What you need to do is convert the data frame to a single (numeric) vector for, e.g. a matrix() call. This can be easily done by noting that a data frame is also a list and using do.call(): ## imp is the data frame: do.call(c,imp) X11 X12 X13 X14 X15 X16 X17 X18 X19 X110 X111 X112 X113 X114 1 2 1 2 1 2 1 2 1 2 1 2 1 2 X115 X116 X21 X22 X23 X24 X25 X26 X27 X28 X29 X210 X211 X212 1 2 0 1 0 1 1 1 0 1 0 1 0 1 X213 X214 X215 X216 Y1 Y2 Y3 Y4 Y5 Y6 Y7 Y8 Y9 Y10 1 1 0 1 1 2 3 4 5 6 7 8 1 2 Y11 Y12 Y13 Y14 Y15 Y16 3 4 5 6 7 8 So, e.g. for a 3 column matrix:> matrix(do.call(c,imp), ncol=3)[,1] [,2] [,3] [1,] 1 0 1 [2,] 2 1 2 [3,] 1 0 3 [4,] 2 1 4 [5,] 1 1 5 [6,] 2 1 6 [7,] 1 0 7 [8,] 2 1 8 [9,] 1 0 1 [10,] 2 1 2 [11,] 1 0 3 [12,] 2 1 4 [13,] 1 1 5 [14,] 2 1 6 [15,] 1 0 7 [16,] 2 1 8 Cheers, Bert Bert Gunter "The trouble with having an open mind is that people keep coming along and sticking things into it." -- Opus (aka Berkeley Breathed in his "Bloom County" comic strip ) On Thu, May 24, 2018 at 7:46 AM, Ioanna Ioannou <ii54250 at msn.com<mailto:ii54250 at msn.com>> wrote: Hello everyone, I want to transform a data.frame into an array (lets call it mydata), where: mydata[[1]] is the first imputed dataset...and for each mydata[[d]], the first p columns are covariates X, and the last one is the outcome Y. Lets assume a simple data.frame: Imputed = data.frame( X1 = c(1,2,1,2,1,2,1,2, 1,2,1,2,1,2,1,2), X2 = c(0,1,0,1,1,1,0,1, 0,1,0,1,1,1,0,1), Y = c(1,2,3,4,5,6,7,8,1,2,3,4,5,6,7,8)) The first 8 have been obtained by the first imputation and the later 8 by the 2nd. Can you help me please? Best, ioanna [[alternative HTML version deleted]] ______________________________________________ R-help at r-project.org<mailto: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]]