Re: [R] How to copy and paste a row at the end of each group of a table?

2016-10-31 Thread PIKAL Petr
Hi

Another approach is to use function like following

fff<-function(x, ...) {
temp <- x[which(x[,"day"]==1),]
temp$day <- 361
x <- rbind(x, temp)
x[order(x$site, x$day),]
}

fff(dat)

Cheers
Petr

> -Original Message-
> From: R-help [mailto:r-help-boun...@r-project.org] On Behalf Of jim
> holtman
> Sent: Monday, October 31, 2016 2:10 PM
> To: Kristi Glover 
> Cc: r-help@r-project.org
> Subject: Re: [R] How to copy and paste a row at the end of each group of a
> table?
>
> try this:
>
> > dat<-structure(list(site = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
> + 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2), day = c(1, 31, 61, 91, 121,
> + 151, 181, 211, 241, 271, 301, 331, 1, 31, 61, 91, 121, 151, 181,
> + 211, 241, 271, 301, 331), temp = c(8.3, 10.3, 9.4, 6.1, 3, 1.3,
> + 1, 0.8, 1, 1.4, 2.7, 5.1, 9, 11.2, 9.6, 5.7, 2, 0.8, 0.6, 0.4,
> + 0.4, 0.6, 1.5, 4.5)), .Names = c("site", "day", "temp"), row.names = c(NA,
> + -24L), class = "data.frame")
> >
> > # split the data, copy value of first row to end
> > dat2 <- do.call(rbind, lapply(split(dat, dat$site), function(.site){
> + x <- rbind(.site, .site[1L, ])  # add first row to bottom
> + x$day[nrow(x)] <- 361
> + x  # return x
> + }))
> > dat2
>   site day temp
> 1.1  1   1  8.3
> 1.2  1  31 10.3
> 1.3  1  61  9.4
> 1.4  1  91  6.1
> 1.5  1 121  3.0
> 1.6  1 151  1.3
> 1.7  1 181  1.0
> 1.8  1 211  0.8
> 1.9  1 241  1.0
> 1.10 1 271  1.4
> 1.11 1 301  2.7
> 1.12 1 331  5.1
> 1.13 1 361  8.3
> 2.13 2   1  9.0
> 2.14 2  31 11.2
> 2.15 2  61  9.6
> 2.16 2  91  5.7
> 2.17 2 121  2.0
> 2.18 2 151  0.8
> 2.19 2 181  0.6
> 2.20 2 211  0.4
> 2.21 2 241  0.4
> 2.22 2 271  0.6
> 2.23 2 301  1.5
> 2.24 2 331  4.5
> 2.1312 361  9.0
>
> Jim Holtman
> Data Munger Guru
>
> What is the problem that you are trying to solve?
> Tell me what you want to do, not how you want to do it.
>
>
> On Mon, Oct 31, 2016 at 8:59 AM, Kristi Glover
>  wrote:
> > Hi R Users,
> >
> > I have a big table with many classes, I need to copy a fist row of each 
> > class
> and put at the end of each class.
> >
> > I split the table but I wonder of copying and putting at the end of the 
> > class.
> Here is an example. I was trying to get the table from "dat" to "dat1". In
> "dat", there is a column with "day", has only 12 rows for each class. but I 
> want
> to copy first row of each class and put on the bottom of the class (see table:
> "dat1"), the value of the column of "day" need to be "361" but the value of
> temp should be same as of row 1.
> >
> >
> > Thanks for your suggestions in advance.
> >
> >
> > Thanks,
> >
> > dat<-structure(list(site = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
> > 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2), day = c(1, 31, 61, 91, 121,
> > 151, 181, 211, 241, 271, 301, 331, 1, 31, 61, 91, 121, 151, 181,
> > 211, 241, 271, 301, 331), temp = c(8.3, 10.3, 9.4, 6.1, 3, 1.3,
> > 1, 0.8, 1, 1.4, 2.7, 5.1, 9, 11.2, 9.6, 5.7, 2, 0.8, 0.6, 0.4,
> > 0.4, 0.6, 1.5, 4.5)), .Names = c("site", "day", "temp"), row.names = c(NA,
> > -24L), class = "data.frame")
> >
> > dat1<-structure(list(site = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
> > 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2), day = c(1, 31, 61, 91,
> > 121, 151, 181, 211, 241, 271, 301, 331, 361, 1, 31, 61, 91, 121,
> > 151, 181, 211, 241, 271, 301, 331, 361), temp = c(8.3, 10.3,
> > 9.4, 6.1, 3, 1.3, 1, 0.8, 1, 1.4, 2.7, 5.1, 8.3, 9, 11.2, 9.6,
> > 5.7, 2, 0.8, 0.6, 0.4, 0.4, 0.6, 1.5, 4.5, 9)), .Names = c("site",
> > "day", "temp"), row.names = c(NA, -26L), class = "data.frame")
> >
> >
> >
> > [[alternative HTML version deleted]]
> >
> > __
> > R-help@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.
>
> __
> R-help@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.


Tento e-mail a jakékoliv k němu připojené dokumenty jsou důvěrné a jsou určeny 
pouze jeho adresátům.
Jestliže jste obdržel(a) tento e-mail omylem, informujte laskavě neprodleně 
jeho odesílatele. Obsah tohoto emailu i s přílohami a jeho kopie vymažte ze 
svého systému.
Nejste-li zamýšleným adresátem tohoto emailu, nejste oprávněni tento email 
jakkoliv užívat, rozšiřovat, kopírovat či zveřejňovat.
Odesílatel e-mailu neodpovídá za eventuální škodu způsobenou modifikacemi či 
zpožděním přenosu e-mailu.

V případě, že je tento e-mail součástí obchodního jednání:
- 

Re: [R] How to copy and paste a row at the end of each group of a table?

2016-10-31 Thread jim holtman
try this:

> dat<-structure(list(site = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2), day = c(1, 31, 61, 91, 121,
+ 151, 181, 211, 241, 271, 301, 331, 1, 31, 61, 91, 121, 151, 181,
+ 211, 241, 271, 301, 331), temp = c(8.3, 10.3, 9.4, 6.1, 3, 1.3,
+ 1, 0.8, 1, 1.4, 2.7, 5.1, 9, 11.2, 9.6, 5.7, 2, 0.8, 0.6, 0.4,
+ 0.4, 0.6, 1.5, 4.5)), .Names = c("site", "day", "temp"), row.names = c(NA,
+ -24L), class = "data.frame")
>
> # split the data, copy value of first row to end
> dat2 <- do.call(rbind, lapply(split(dat, dat$site), function(.site){
+ x <- rbind(.site, .site[1L, ])  # add first row to bottom
+ x$day[nrow(x)] <- 361
+ x  # return x
+ }))
> dat2
  site day temp
1.1  1   1  8.3
1.2  1  31 10.3
1.3  1  61  9.4
1.4  1  91  6.1
1.5  1 121  3.0
1.6  1 151  1.3
1.7  1 181  1.0
1.8  1 211  0.8
1.9  1 241  1.0
1.10 1 271  1.4
1.11 1 301  2.7
1.12 1 331  5.1
1.13 1 361  8.3
2.13 2   1  9.0
2.14 2  31 11.2
2.15 2  61  9.6
2.16 2  91  5.7
2.17 2 121  2.0
2.18 2 151  0.8
2.19 2 181  0.6
2.20 2 211  0.4
2.21 2 241  0.4
2.22 2 271  0.6
2.23 2 301  1.5
2.24 2 331  4.5
2.1312 361  9.0

Jim Holtman
Data Munger Guru

What is the problem that you are trying to solve?
Tell me what you want to do, not how you want to do it.


On Mon, Oct 31, 2016 at 8:59 AM, Kristi Glover
 wrote:
> Hi R Users,
>
> I have a big table with many classes, I need to copy a fist row of each class 
> and put at the end of each class.
>
> I split the table but I wonder of copying and putting at the end of the 
> class. Here is an example. I was trying to get the table from "dat" to 
> "dat1". In "dat", there is a column with "day", has only 12 rows for each 
> class. but I want to copy first row of each class and put on the bottom of 
> the class (see table: "dat1"), the value of the column of "day" need to be 
> "361" but the value of temp should be same as of row 1.
>
>
> Thanks for your suggestions in advance.
>
>
> Thanks,
>
> dat<-structure(list(site = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2), day = c(1, 31, 61, 91, 121,
> 151, 181, 211, 241, 271, 301, 331, 1, 31, 61, 91, 121, 151, 181,
> 211, 241, 271, 301, 331), temp = c(8.3, 10.3, 9.4, 6.1, 3, 1.3,
> 1, 0.8, 1, 1.4, 2.7, 5.1, 9, 11.2, 9.6, 5.7, 2, 0.8, 0.6, 0.4,
> 0.4, 0.6, 1.5, 4.5)), .Names = c("site", "day", "temp"), row.names = c(NA,
> -24L), class = "data.frame")
>
> dat1<-structure(list(site = c(1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
> 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2), day = c(1, 31, 61, 91,
> 121, 151, 181, 211, 241, 271, 301, 331, 361, 1, 31, 61, 91, 121,
> 151, 181, 211, 241, 271, 301, 331, 361), temp = c(8.3, 10.3,
> 9.4, 6.1, 3, 1.3, 1, 0.8, 1, 1.4, 2.7, 5.1, 8.3, 9, 11.2, 9.6,
> 5.7, 2, 0.8, 0.6, 0.4, 0.4, 0.6, 1.5, 4.5, 9)), .Names = c("site",
> "day", "temp"), row.names = c(NA, -26L), class = "data.frame")
>
>
>
> [[alternative HTML version deleted]]
>
> __
> R-help@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.

__
R-help@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.