[R] set dataframe field value from lookup table
David Winsemius
dwinsemius at comcast.net
Thu Dec 9 16:33:15 CET 2010
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?
df$Agetmp <- c(17,19,24,29,34,44,54,64,69,74,79,84)[ # note Extract
operation
findInterval(runif(100,0,100),
c(17,19,24,29,34,44,54,64,69,74,79,84,110) )
] # close extraction
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
More information about the R-help
mailing list