On 16/01/2011 9:13 AM, Patrick Hausmann wrote:
> Dear all,
>
> for each A == 3 in 'df' I would like to change the variables B and K.
> My result should be the whole df and not the subset (A==3)...
>
> df<- data.frame(A = c(1,1,3,2,2,3,3),
>                    B = c(2,1,1,2,7,8,7),
>                    K = c("a.1", "d.2", "f.3",
>                          "a.1", "k.4", "f.9", "f.5"))
>
> x1<- within(df[df$A ==3, ], {

This is the problem: you've subsetted the dataset here, and lost all the other lines. You want something like this:

  x3 <- within(df, {
               B <- ifelse(A == 3, 5, B)
               K <- ifelse(A == 3, gsub("f", "m", K), as.character(K)) }
        )

You need the "as.character" as by default K will be a factor, not a character vector, and ifelse will take the factor level instead of the label.

If the condition was more complicated than A == 3, you might want to calculate it first and use the calculated value each time:


  x3 <- within(df, {
               changes <- A == 3
               B <- ifelse(changes, 5, B)
               K <- ifelse(changes, gsub("f", "m", K), as.character(K))
               rm(changes)
           }
        )

>          B1<- 5
>          K1<- gsub("f","m", K)
>          })
>
> x2<- transform(df[df$A==3, ], B1 = 5, K1 = gsub("f","m", K))
>
> Thanks for any help!
> Patrick
>
> ______________________________________________
> 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.

______________________________________________
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.

Reply via email to