On Mar 1, 2012, at 1:02 PM, Sarah Goslee wrote:

You're all correct: I copied in the wrong thing. My apologies!

On Thu, Mar 1, 2012 at 1:00 PM, Ista Zahn <istaz...@gmail.com> wrote:
Hi,

On Mar 1, 2012, at 12:38 PM, Sarah Goslee wrote:

Hi,

On Thu, Mar 1, 2012 at 11:11 AM, mails <mails00...@gmail.com> wrote:
Hello,


consider the following data.frame:

test <- data.frame(n = c(1,2,3,4,5), v = c(6,5,7,5,3), pattern =
c(1,1,NA,1,NA))


< snip >

So basically the result should look like this:
test
 n v pattern
1  1     NA       1
2  2     NA      1
3  3     7      NA
4  4     NA       1
5  5     3      NA

So far, I solved it by creating subsets and using merge but it turns out to
be super slow. Is there a way to do that
with the apply function?

Far too much work. What about:

test$v <- ifelse(test$pattern == 1, NA, v)
test
 n  v pattern
1 1 NA       1
2 2 NA       1
3 3 NA      NA
4 4 NA       1
5 5 NA      NA

Actually that doesn't work because of those pesky missing values. You need

test <- transform(test, v = ifelse(pattern == 1 & !is.na(pattern), NA, v))


What about just using `is.na<-`:

is.na(test$v) <- test$pattern==1



--
David Winsemius, MD
West Hartford, CT

______________________________________________
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