[R] recode involving a count rule
jim holtman
jholtman at gmail.com
Sat May 3 22:15:37 CEST 2008
This should do what you want -- not sure what happens after the 4th less than 5.
> a <- rep(c(3,5,7), 4)
> b <- rep(c(NA,1,2), 4)
> df <- data.frame(a,b)
> # determine which ones are < 5 and count the occurances
> less.5 <- cumsum(df$a < 5)
> # create new value
> df$c <- ifelse(df$a < 5, (less.5 + 1) %/% 2, df$b)
> df
a b c
1 3 NA 1
2 5 1 1
3 7 2 2
4 3 NA 1
5 5 1 1
6 7 2 2
7 3 NA 2
8 5 1 1
9 7 2 2
10 3 NA 2
11 5 1 1
12 7 2 2
On Sat, May 3, 2008 at 3:43 PM, Greg Blevins <gregblev at gmail.com> wrote:
> Hello, R-helpers.
>
> I have a data frame below called df. I want to add a variable c, based on
> the following logic:
>
> if df$a < 5 then the first two times this condition is met place a 1 in c,
> the next two times this condition is met place a 2 in c and when the
> condition is not met let c equal df$b. The result would look like, dfnew,
> shown below.
>
>
> a <- rep(c(3,5,7), 4)
> b <- rep(c(NA,1,2), 4)
> df <- data.frame(a,b)
>
> > df
> a b
> 1 3 NA
> 2 5 1
> 3 7 2
> 4 3 NA
> 5 5 1
> 6 7 2
> 7 3 NA
> 8 5 1
> 9 7 2
> 10 3 NA
> 11 5 1
> 12 7 2
>
> c <- c(1 , 1, 2, 1, 1, 2, 2, 1, 2, 2, 1, 2)
> dfnew <- data.frame(a, b,c)
> > dfnew
> a b c
> 1 3 NA 1
> 2 5 1 1
> 3 7 2 2
> 4 3 NA 1
> 5 5 1 1
> 6 7 2 2
> 7 3 NA 2
> 8 5 1 1
> 9 7 2 2
> 10 3 NA 2
> 11 5 1 1
> 12 7 2 2
>
> Thanks
> Greg
> R 2.7 XP
>
> --
> Gregory L. Blevins
> Office 952 944-5743
> Cell 612 251 0232
> gregblev at gmail.com
>
> [[alternative HTML version deleted]]
>
> ______________________________________________
> 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?
More information about the R-help
mailing list