On Feb 1, 2010, at 11:36 AM, David Winsemius wrote:


On Feb 1, 2010, at 11:11 AM, Jerry Floren wrote:


HI,

I am using Windows XP and R version 2.9.2. I have a data frame written by R
similar to the following:

Lab_ID    Analysis_Soil        Results        -4MAD      -2.5MAD
+2.5MAD        +4MAD
55003    Calcium-2008-116      900             961        1121.5
1656.5          1817
55003    Calcium-2008-117     3321           2175        2380.5
3065.5          3271
55003    Calcium-2008-118     3342           3155        4019
6899            7763
55003 Calcium-2008-119 1664 1005.6 1147.92 1622.32
1764.64
55003 Calcium-2008-120 2570 1880 2072 2712
2904

Previously, I took this table and finished my analysis in Excel using
Excel's "=if" function.

I'll bet that was painful.

However, I am sure it can be done in R. What I want
to do is set up a new data.frame with a new column for Accuracy Flags
(a_flag) as shown below.

Lab_ID    Analysis_Soil        Results        -4MAD      -2.5MAD
+2.5MAD        +4MAD        a_flag
55003    Calcium-2008-116      900             961        1121.5
1656.5          1817         **L
55003    Calcium-2008-117     3321           2175        2380.5
3065.5          3271         **H
55003    Calcium-2008-118     3342           3155        4019
6899            7763           *L
55003 Calcium-2008-119 1664 1005.6 1147.92 1622.32
1764.64      *H
55003 Calcium-2008-120 2570 1880 2072 2712
2904


df.soil$a_flag <- apply(df.soil, 1, function(.x)
         switch(findInterval(.x$Result, c(-Inf,-4,-2.5,2.5,4,Inf)) ,
"**L", "*L", " ", "*H", "**H") )

Sorry I didn't note the irregularity of the limits. Try instead:

df.soil$a_flag <- apply(df.soil, 1, function(.x)
         switch(findInterval(.x[3], as.numeric( c(-Inf,.x[4:7],Inf)) ),
"**L", "*L", " ", "*H", "**H") )

I wasn't sure why the passage of the function made it necessary to add the as.numeric, but I am guessing that .x became a character vector in order to hold the first two columns. That would not be be needed, it you only passed the last 5 columns as df.soil[3:7] as an argument to apply.



For each row I need to compare the "Results" submitted by the labs to the four "MAD" columns. If the Results are less than -4.0 MAD units from the median, labs are flagged "**L" (very low). For results greater than +4.0 MAD units, labs are flagged "**H" (very high). Likewise for -2.5 MAD and +2.5 MAD (*L and *H respectively). As shown in the last row, labs are not flagged
for results within -2.5 MAD to +2.5 MAD units.

Can anyone get me started on how to look at each row and compare the
"Results" variable with each of the four "__MAD" variables and then writing the appriate flag for Results exceeding -2.5 MAD to +2.5 MAD units from the
median?

Thanks,

Jerry Floren
Minnesota Department of Agriculture







--
View this message in context: 
http://n4.nabble.com/Comparing-Variables-and-Writing-a-New-Column-tp1458947p1458947.html
Sent from the R help mailing list archive at Nabble.com.

______________________________________________
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
Heritage Laboratories
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
Heritage Laboratories
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