Hello,
Michael's standard guess, FAQ 7.31, was also mine, but is wrong. The
error is in Jennifer's flag column, not the result of her ifelse. (!)
x <- scan(what="character", text="
PM.EXP PM.DIST.TOT PM.DIST_flag 0 0 0 0 0 0 0 0 0 177502 1 0 31403 1
0 0 0 0 1100549 1 0 38762 1 0 0 0 0 20025 1 0 0 0 0 13742 1 0 0 0 0
83078 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
165114 1 0 0 0 0 417313 1 0 3546 1 0 4613 1 0 225460 1 0 6417 1 1 23
1 0 3402 1 0 8504 1 1 8552 1 0 9723 1 0 37273 1 1 396 1 0 1478 1 0
2074 1 0 12220 1 1 97691 2 1 0 0 0 33993 2 1
")
vn <- matrix(as.numeric(x[-(1:3)]), ncol=3, byrow=TRUE)
vn <- data.frame(vn)
names(vn) <- x[1:3]
str(vn)
vn$flag2 <- ifelse( (vn$PM.EXP > 0.0) & (vn$PM.DIST.TOT != 1.0), 1, 0 )
str(vn)
identical(vn$PM.DIST_flag, vn$flag2) # FALSE
inx <- vn$PM.DIST_flag != vn$flag2
vn[inx, ]
As you can see, there's nothing wrong with ifelse. The second standard
guess is that Jennifer had something, a variable, in her session messing
up with the variables envolved in the ifelse.
Also, when the result of a if/else or ifelse is, by this order, 1 or 0,
the following can be used, with performance benefits.
vn$flag3 <- 1 * (vn$PM.EXP > 0.0 & vn$PM.DIST.TOT != 1.0) # make T/F
numeric 1/0
Hope this helps,
Rui Barradas
Em 24-08-2012 21:43, Jennifer Sabatier escreveu:
Oops, sorry, I thought I was in plain text. I can't tell the
difference because I use so little formatting in my emails.
Try this (a truncated version since I have to hand space everything):
PM.EXP PM.DIST.TOT PM.DIST_flag
0 0 0
6417 1 1
23 1 0
97691 2 1
0 0 0
33993 2 1
On Fri, Aug 24, 2012 at 4:36 PM, R. Michael Weylandt
<michael.weyla...@gmail.com> wrote:
On Fri, Aug 24, 2012 at 3:22 PM, Jennifer Sabatier
<plessthanpointohf...@gmail.com> wrote:
Hi R-Helpers,
I don't think I need to post a dataset for this question but if I do, I
can. Anyway, I am having a lot of trouble with the ifelse command.
You probably should have: dput() makes it super easy as well.
Here is my code:
vn$PM.DIST_flag <- ifelse( (vn$PM.EXP > 0.0) & (vn$PM.DIST.TOT != 1.0),
1,
0 )
And here is my output that doesn't make ANY sense:
PM.EXP PM.DIST.TOT PM.DIST_flag 0 0 0 0 0 0 0 0 0 177502 1 0
31403 1
0 0 0 0 1100549 1 0 38762 1 0 0 0 0 20025 1 0 0 0 0 13742 1 0 0
0 0
83078 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
165114 1 0 0 0 0 417313 1 0 3546 1 0 4613 1 0 225460 1 0 6417 1 1
23
1 0 3402 1 0 8504 1 1 8552 1 0 9723 1 0 37273 1 1 396 1 0 1478 1
0
2074 1 0 12220 1 1 97691 2 1 0 0 0 33993 2 1
Indeed it makes no sense to me either because you sent HTML email
which got mangled by the server.
As you can see, there are many instances where PM.EXP > 0 and
PM.DIST.TOT =
1 yet PM.DIST_flag = 1 and it should be 0. It should only flag in cases
such as the last line of data.
WWHHHYYYYYYYY???? Why why why why why why why? Why?
(Sorry, I've been trying to figure this out for hours and I've devolved
to
mumbling in corners and banging my head against the table)
What in the world am I doing wrong? Or is ifelse not the right
function?
First guess.... standard problems with equality of floating point
numbers. (See R FAQ 7.31 for the details)
You probably want to change
x == 1
to
abs(x - 1) < 1e-05
or something similar.
Cheers,
Michael
Best,
Jen
[[alternative HTML version deleted]]
______________________________________________
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.
______________________________________________
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.