On Dec 9, 2010, at 10:33 AM, David Winsemius wrote:
On Dec 9, 2010, at 9:34 AM, Jon Erik Ween wrote:
Hi
This is (hopefully) a bit more cogent phrasing of a previous post.
I'm
trying to compute a z-score to rows in a large dataframe based on
values in
another dataframe. Here's the script (that does not work). 2
questons,
1) Anyone know of a more elegant way to calculate the "rounded" age
value
than the nested ifelse's I've used?
2) how to reference the lookup table based on computed indices?
Thanks
Jon
# Define tables
DSTzlook <-
read.table("/Users/jween/Documents/ResearchProjects/ABC/data/
DSTz.txt",
header=TRUE, sep="\t", na.strings="NA", dec=".", strip.white=TRUE)
df<-stroke
# Compute rounded age.
df$Agetmp
<-ifelse(df$Age>=89,89,ifelse(df$Age>=84,84,ifelse(df
$Age>=79,79,ifelse(df$Age>=74,74,ifelse(df$Age>=69,69,ifelse(df
$Age>=64,64,ifelse(df$Age>=54,54,ifelse(df$Age>=44,44,ifelse(df
$Age>=34,34,ifelse(df$Age>=29,29,ifelse(df$Age>=24,24,ifelse(df
$Age>=19,19,17))))))))))))
Ew, painful. If you want categorized ages (since what the above
coding is producing is not "rounded" in any sense of that word as I
understand it, then why not findInterval() as an index into the ages
you wnat to label these case with?
### Cut out incorrect code from prior posting:
c(17, 17, 19, 24, 29, 34, 44, 54, 64, 69, 74, 79, 84, 89)[
findInterval( 19, c(0, 17, 19, 24, 29, 34, 44, 54, 64, 69, 74,
79, 84, 89) ) ]
I see my pasting of a test vector didn't get properly replaced. Also
added the missing "89" and fixed the mis-registration of "label
vector" with interval vector. (This reply was better tested than the
first, but you clearly need to check my work here.)
--
David
The other option, of course, and a more "honest" one in this
instance would be
cut(vec, breaks=c(...), labels=c(...) )
(It's not clear why you are not picking midpoint ages within those
brackets to me.)
# Reference the lookup table based on computed indices
df$DSTz
<-DSTzlook[which(DSTzlook[,1]==df$Agetmp),which(DSTzlook[1,]==df$DSF
+df$DSB)]
I have not been able to figure out what you are trying to do here.
Trying to use a 2d lookup looks promising a a way to emulate what an
Excel user might attempt, but an example (as requested in the
message at the bottom of every posting) would really be of great
help in making this more concrete for those of us with insufficient
abstractive abilities.
--
David.
# Cleanup
#rm(df)
#df$Agetmp<-NULL
--
View this message in context:
http://r.789695.n4.nabble.com/set-dataframe-field-value-from-lookup-table-tp3080245p3080245.html
Sent from the R help mailing list archive at Nabble.com.
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.
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.