Hello every body, I am quite a new user of R so I beg your pardon for this naive question and the lake of syntax with wich I ask it: I have a data frames like this: cola colb 1 c 1 i 1 i 1 c 2 i 2 c 2 c 2 i 2 i ... 10000 I would like ,for each level of cola and for x in colb: -if colb[x]=="i" and colb[x-1] does not exist (first row in dataframes), then replace colb[x] by "l" -if colb[x]=="i" and colb[x-1]=="c" (previous row in data frmes), then replace colb[x] by "l" -if colb[x]=="i" and colb[x-1]=="i" (previous row in data frmes), then replace colb[x] by "h" Thanks in advance Paul -- View this message in context: http://www.nabble.com/change-values-in-data-frames-tp18151205p18151205.html Sent from the R help mailing list archive at Nabble.com.
Is this what you want:> xcola colb 1 1 c 2 1 i 3 1 i 4 1 c 5 2 i 6 2 c 7 2 c 8 2 i 9 2 i> # generate run lengths > z <- rle(x$colb) > # calculate offset of each starting sequence > offsets <- head(cumsum(c(1, z$lengths)), -1) > # now determine where the 'i' is more than 1 > long <- which(z$lengths > 1 & z$values == 'i') > # now replace all 'i' with 'I' > x$colb[x$colb == 'i'] <- 'I' > # replace lon runs with 'h' > for (i in long){+ x$colb[(offsets[i]+1):(offsets[i] + z$lengths[i] - 1)] <- rep('h', z$lengths[i] - 1) + }> xcola colb 1 1 c 2 1 I 3 1 h 4 1 c 5 2 I 6 2 c 7 2 c 8 2 I 9 2 h> >On Fri, Jun 27, 2008 at 5:17 AM, poul <morteterre at infonie.fr> wrote:> > Hello every body, > I am quite a new user of R so I beg your pardon for this naive question and > the lake of syntax with wich I ask it: > > I have a data frames like this: > > cola colb > 1 c > 1 i > 1 i > 1 c > 2 i > 2 c > 2 c > 2 i > 2 i > ... > 10000 > > I would like ,for each level of cola and for x in colb: > > -if colb[x]=="i" and colb[x-1] does not exist (first row in dataframes), > then replace colb[x] by "l" > -if colb[x]=="i" and colb[x-1]=="c" (previous row in data frmes), then > replace colb[x] by "l" > -if colb[x]=="i" and colb[x-1]=="i" (previous row in data frmes), then > replace colb[x] by "h" > > Thanks in advance > > Paul > > -- > View this message in context: http://www.nabble.com/change-values-in-data-frames-tp18151205p18151205.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > 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. >-- Jim Holtman Cincinnati, OH +1 513 646 9390 What is the problem you are trying to solve?
Another way to do it (a more or less straightforward translation of what you said): fun <- function(x) { xp <- c("", x)[-(length(x)+1)] # to get the "previous element of x" x[1] <- if(x[1]=="i") "l" else x[1] x <- ifelse(x == "i" & xp == "c", "l", x) x <- ifelse(x == "i" & xp == "i", "h", x) x } fun(X$colb) -- or if I understood you correctly, you would actually want this to be done separately within each level of cola: unlist(tapply(X$colb, X$cola, fun)) Kenn On Fri, Jun 27, 2008 at 12:17 PM, poul <morteterre@infonie.fr> wrote:> > Hello every body, > I am quite a new user of R so I beg your pardon for this naive question and > the lake of syntax with wich I ask it: > > I have a data frames like this: > > cola colb > 1 c > 1 i > 1 i > 1 c > 2 i > 2 c > 2 c > 2 i > 2 i > ... > 10000 > > I would like ,for each level of cola and for x in colb: > > -if colb[x]=="i" and colb[x-1] does not exist (first row in dataframes), > then replace colb[x] by "l" > -if colb[x]=="i" and colb[x-1]=="c" (previous row in data frmes), then > replace colb[x] by "l" > -if colb[x]=="i" and colb[x-1]=="i" (previous row in data frmes), then > replace colb[x] by "h" > > Thanks in advance > > Paul > > -- > View this message in context: > http://www.nabble.com/change-values-in-data-frames-tp18151205p18151205.html > Sent from the R help mailing list archive at Nabble.com. > > ______________________________________________ > R-help@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. >[[alternative HTML version deleted]]