[R] Extract values from vector and repeat by group

arun smartpink111 at yahoo.com
Mon Nov 18 15:42:05 CET 2013


Hi,

I would also add an index to make it work for groups that doesn't have time=4.
df1 <- df[-12,]
fun1 <- function(dat,n) {
 indx <- with(dat,tapply(time==n,group,FUN=any))
 indx2 <- with(dat,ave(time==n,group,FUN=any))
 dat[indx2,"new"] <- rep(dat$var[dat$time==n],rle(dat$group)$lengths[indx])
dat[!is.na(dat$new),] 
 }
fun1(df,4)
fun1(df1,4)

A.K.




On Monday, November 18, 2013 9:18 AM, PIKAL Petr <petr.pikal at precheza.cz> wrote:
Hi

probably not most elegant and also not general but

rep(df$var[df$time==4],rle(df$group)$lengths)

or

rep(df$var[df$time==4],  sapply(split(df$var,df$group), length))

shall give you desired vector.

Regards
Petr


> -----Original Message-----
> From: r-help-bounces at r-project.org [mailto:r-help-bounces at r-
> project.org] On Behalf Of Benjamin Gillespie
> Sent: Sunday, November 17, 2013 3:47 PM
> To: r-help at r-project.org
> Subject: [R] Extract values from vector and repeat by group
> 
> Hi all,
> 
> I hope you can help.
> 
> I have a data frame 'df':
> 
> group=c(rep(1,8),rep(2,10),rep(3,11))
> var=rnorm(29)
> time=c(seq(1,8),seq(1,10),seq(1,11))
> df=data.frame(group,var,time)
> 
> I would like to extract the value from 'var' for each 'group' at
> 'time'=4 and repeat these extracted values in a new vector ('new') n
> times where n is the number of rows for each group. I did this by hand
> as below, but there must be a quicker way:
> 
> subset=subset(df,df$time==4)
> subset
> group        var time
> 4      1  0.2531270    4
> 12     2 -0.3600128    4
> 22     3  0.4194730    4
> 
> df$new=c(rep(0.2531270,8),rep(-0.3600128,10),rep(0.4194730,11))
> 
> Any questions please ask,
> 
> Many thanks in advance,
> 
> Ben Gillespie, Research Postgraduate
> o-------------------------------------------------------------------o
> School of Geography, University of Leeds, Leeds, LS2 9JT o-------------
> ------------------------------------------------------o
> Tel: +44(0)113 34 33345
> Mob: +44(0)770 868 7641
> o-------------------------------o
> http://www.geog.leeds.ac.uk/
> o-------------------------------------o
> @RiversBenG
> o--------------o
> ______________________________________________
> R-help at 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.


______________________________________________
R-help at 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.




More information about the R-help mailing list