Hmmmm, I pulled out a portion of the data set to create the code for
posting.  When I execute this on the data frame I get the following for
subject 8 which is clearly incorrect.  I get this for all subjects who
originally had "1 & 2".

 dat$respalt <- with(dat, ave(Slide1_RESP, factor(grid), FUN = foo))>
head(dat$respalt,20+     ) [1] 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1


On Mon, Aug 8, 2011 at 11:14 AM, Joshua Wiley <jwiley.ps...@gmail.com>wrote:

> Hmm, well I suppose it technically does "touch" in some sense still if
> there are 1 & 2s, but it should just return it as is, not changed.
> Thanks for the data, very easy!  Here is what I get:
>
> dat <- structure(list(subject = c(8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L,
> 8L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 6L, 6L,
> 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L), resp = c(2, 1, 1, 2, 1, 2, 1,
> 1, 1, 1, 4, 4, 2, 2, 4, 4, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2,
> 1, 2)), .Names = c("subject", "resp"), row.names = c(1L, 2L,
> 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 4161L, 4162L, 4163L, 4164L,
> 4165L, 4166L, 4167L, 4168L, 4169L, 4170L, 166L, 167L, 168L, 169L,
> 170L, 171L, 172L, 173L, 174L, 175L), class = "data.frame")
>
> require(car)
> foo <- function(x) {
>  if (any(grepl(4, x))) {
>    x <- recode(x, "2 = 1; 4 = 2")
>  }
>  return(x)
> }
>
> dat$respalt <- with(dat, ave(resp, factor(subject), FUN = foo))
>
> ## which at least for me gives:
> structure(list(subject = c(8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L,
> 8L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 6L, 6L,
> 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L), resp = c(2, 1, 1, 2, 1, 2, 1,
> 1, 1, 1, 4, 4, 2, 2, 4, 4, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2,
> 1, 2), respalt = c(2, 1, 1, 2, 1, 2, 1, 1, 1, 1, 2, 2, 1, 1,
> 2, 2, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1, 2, 2, 1, 2)), .Names = c("subject",
> "resp", "respalt"), row.names = c(1L, 2L, 3L, 4L, 5L, 6L, 7L,
> 8L, 9L, 10L, 4161L, 4162L, 4163L, 4164L, 4165L, 4166L, 4167L,
> 4168L, 4169L, 4170L, 166L, 167L, 168L, 169L, 170L, 171L, 172L,
> 173L, 174L, 175L), class = "data.frame")
>
> Does that work for you?  I am running:
>
> R Under development (unstable) (2011-07-30 r56564)
> Platform: x86_64-pc-mingw32/x64 (64-bit)
> with car_2.0-10
>
> HTH,
>
> Josh
>
> On Mon, Aug 8, 2011 at 9:02 AM, Edward Patzelt <patze...@umn.edu> wrote:
> > Here's the code.  I don't want it to even touch the vector if there are
> > already "1's & 2's"
> >
> > structure(list(subject = c(8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L, 8L,
> > 8L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 42L, 6L, 6L,
> > 6L, 6L, 6L, 6L, 6L, 6L, 6L, 6L), resp = c(2, 1, 1, 2, 1, 2, 1,
> > 1, 1, 1, 4, 4, 2, 2, 4, 4, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 2, 2,
> > 1, 2)), .Names = c("subject", "resp"), row.names = c(1L, 2L,
> > 3L, 4L, 5L, 6L, 7L, 8L, 9L, 10L, 4161L, 4162L, 4163L, 4164L,
> > 4165L, 4166L, 4167L, 4168L, 4169L, 4170L, 166L, 167L, 168L, 169L,
> > 170L, 171L, 172L, 173L, 174L, 175L), class = "data.frame")
> >
> > R version 2.12.2 (2011-02-25)
> > Platform: x86_64-pc-mingw32/x64 (64-bit)
> >
> > locale:
> > [1] LC_COLLATE=English_United States.1252  LC_CTYPE=English_United
> > States.1252    LC_MONETARY=English_United States.1252
> > [4] LC_NUMERIC=C                           LC_TIME=English_United
> > States.1252
> >
> > attached base packages:
> > [1] splines   stats     graphics  grDevices utils     datasets  methods
> > base
> >
> > other attached packages:
> > [1] car_2.0-10      nnet_7.3-1      MASS_7.3-11     Hmisc_3.8-3
> > survival_2.36-5 RODBC_1.3-2
> >
> > loaded via a namespace (and not attached):
> > [1] cluster_1.13.3  grid_2.12.2     lattice_0.19-17 tools_2.12.2
> >
> > On Mon, Aug 8, 2011 at 10:43 AM, Joshua Wiley <jwiley.ps...@gmail.com>
> > wrote:
> >>
> >> On Mon, Aug 8, 2011 at 8:23 AM, Edward Patzelt <patze...@umn.edu>
> wrote:
> >> > Thanks Josh for the code to post I have been trying to figure out how
> to
> >> > do
> >> > that.  Your code works except that it changes subjects that responded
> >> > with
> >> > "1 & 2" to all 1's.  What does the "ave" argument mean in the
> execution
> >> > of
> >>
> >> Not in the example data you provided on my system.  If you can provide
> >> data (preferablly using dput() or uploading a txt file on a file
> >> hosting service) that reproduces this issue, I will be happy to look
> >> at it for you.  You might also try reporting your sessionInfo() ---
> >> this may be related to the version of R or the packages you are using,
> >> but at present I have no information.
> >>
> >> > the function?
> >>
> >> 'ave' is not an argument in the function.  ave() *is* a function.  I
> >> call with() to have the ave() function evaluated in an environment
> >> created from dat (the data).  See ?ave and ?with  I could have
> >> equivalently (though more cumbersomely) written:
> >>
> >> ave(dat$Slide1_RESP, dat$Subject, FUN = foo))
> >>
> >> because ave will now be evaluated in the global environment, it will
> >> not have access to the variables stored in 'dat' unless explicitly
> >> told that they are in dat (as above).
> >>
> >> Cheers,
> >>
> >> Josh
> >>
> >> > library(car)
> >> > foo <- function(x) {
> >> >  if (any(grepl(4, x))) {
> >> >    x <- recode(x, "2 = 1; 4 = 2")
> >> >  }
> >> >  return(x)
> >> > }
> >> > ## do it
> >> > dat$test <- with(dat, ave(Slide1_RESP, Subject, FUN = foo))
> >> > On Fri, Aug 5, 2011 at 4:56 PM, Joshua Wiley <jwiley.ps...@gmail.com>
> >> > wrote:
> >> >>
> >> >> On Fri, Aug 5, 2011 at 2:34 PM, Edward Patzelt <patze...@umn.edu>
> >> >> wrote:
> >> >> >
> >> >> > The problem is that we were using a task where some subjects
> >> >> > responded
> >> >> > with "1 & 2" and some responded with "2 & 4".  So there is overlap
> >> >> > for 2
> >> >> > because it means stimulus 1 for subject 1 and it means stimulus 2
> for
> >> >> > subject 2.
> >> >> >
> >> >> > subject
> >> >> >
> >> >> > subject_1
> >> >> >
> >> >> > 1
> >> >> >
> >> >> > subject_1
> >> >> >
> >> >> > 1
> >> >> >
> >> >> > subject_1
> >> >> >
> >> >> > 1
> >> >> >
> >> >> > subject_1
> >> >> >
> >> >> > 2
> >> >> >
> >> >> > subject_1
> >> >> >
> >> >> > 2
> >> >> >
> >> >> > subject_2
> >> >> >
> >> >> > 4
> >> >> >
> >> >> > subject_2
> >> >> >
> >> >> > 2
> >> >> >
> >> >> > subject_2
> >> >> >
> >> >> > 2
> >> >> >
> >> >> > subject_2
> >> >> >
> >> >> > 4
> >> >> >
> >> >> > subject_2
> >> >> >
> >> >> > 2
> >> >> >
> >> >> > subject_2
> >> >> >
> >> >> > 2
> >> >> >
> >> >> > subject_2
> >> >> >
> >> >> > 2
> >> >> >
> >> >> > subject_2
> >> >> >
> >> >> > 4
> >> >>
> >> >> FYI providing data in the format above (this list is plain text)
> makes
> >> >> the job of those trying to help substantially harder.  You can use
> >> >> dput().  For example, if I wanted to share the first 10 rows of the
> >> >> built in mtcars data set, I would just copy and paste the output from
> >> >> running:
> >> >>
> >> >> dput(mtcars[1:10, ])
> >> >>
> >> >> Anyway, here you go, this should be directly executable as long as
> you
> >> >> have installed the 'car' package.
> >> >>
> >> >> ## your data in a form easily copied and pasted into the console
> >> >> ## created using dput() (highly recommended for future posts)
> >> >> dat <- structure(list(subject = c("subject_1", "subject_1",
> >> >> "subject_1",
> >> >> "subject_1", "subject_1", "subject_2", "subject_2", "subject_2",
> >> >> "subject_2", "subject_2", "subject_2", "subject_2", "subject_2"
> >> >> ), val = c(1, 1, 1, 2, 2, 4, 2, 2, 4, 2, 2, 2, 4)), .Names =
> >> >> c("subject",
> >> >> "val"), row.names = c(NA, -13L), class = "data.frame")
> >> >>
> >> >> ## load the required package for recoding
> >> >> ## though it is overkill for only two levels
> >> >> require(car)
> >> >>
> >> >> ## define a function to do the recoding
> >> >> foo <- function(x) {
> >> >>  if (any(grepl(4, x))) {
> >> >>    x <- recode(x, "2 = 1; 4 = 2")
> >> >>  }
> >> >>  return(x)
> >> >> }
> >> >>
> >> >> ## do it
> >> >> dat$altval <- with(dat, ave(val, subject, FUN = foo))
> >> >>
> >> >> Cheers,
> >> >>
> >> >> Josh
> >> >>
> >> >>
> >> >> >
> >> >> > On Fri, Aug 5, 2011 at 4:25 PM, Joshua Wiley <
> jwiley.ps...@gmail.com>
> >> >> > wrote:
> >> >> >>
> >> >> >> Hi Edward,
> >> >> >>
> >> >> >> You can try something like:
> >> >> >>
> >> >> >> u.ppl <- unique(init.dat1$grid)
> >> >> >> l.ppl <- ifelse(grepl(4, init.dat1$Slide1_RESP), 2,
> >> >> >>                init.dat1$Slide1_RESP)
> >> >> >>
> >> >> >> Note that this is not exact as you have not provided a
> reproducible
> >> >> >> example.  I am not exactly sure how you are  putting 1 for 2 and 2
> >> >> >> for
> >> >> >> 4, if the value is equal to 4, but presumably it is clearer with
> >> >> >> data.
> >> >> >>  In any event, look at ?ifelse it is something like a vectorized
> if
> >> >> >> statement and is, I believe, preferable to your use of a for loop.
> >> >> >>  I
> >> >> >> can probably give you a runnable solution if you can give the
> first
> >> >> >> few rows of the relevant data.
> >> >> >>
> >> >> >> Cheers,
> >> >> >>
> >> >> >> Josh
> >> >> >>
> >> >> >> On Fri, Aug 5, 2011 at 2:15 PM, Edward Patzelt <patze...@umn.edu>
> >> >> >> wrote:
> >> >> >> > I want to write code that says "If you find an element equal to
> 4
> >> >> >> > in
> >> >> >> > this
> >> >> >> > vector for each person in the data set tested separately, then
> put
> >> >> >> > in
> >> >> >> > 1 for
> >> >> >> > 2 and 2 for 4, else leave the variable as is"
> >> >> >> >
> >> >> >> >  u.ppl <- (unique(init.dat1$grid))
> >> >> >> >      l.ppl <- length(u.ppl)
> >> >> >> >        for (i in 1:l.ppl)
> >> >> >> >        {
> >> >> >> >          if (grep("4",init.dat1$Slide1_RESP)) {2 == 1, 4 == 2};
> >> >> >> > else
> >> >> >> > init.dat1$Slide1_RESP
> >> >> >> >
> >> >> >> >        }
> >> >> >> >
> >> >> >> > --
> >> >> >> > Edward H. Patzelt
> >> >> >> > Research Assistant – TRiCAM Lab
> >> >> >> > University of Minnesota – Psychology/Psychiatry
> >> >> >> > VA Medical Center
> >> >> >> > Office: S355 Elliot Hall - Twin Cities Campus
> >> >> >> > Phone: 612-626-0072  Email: patze...@umn.edu
> >> >> >> >
> >> >> >> > Please consider the environment before printing this email
> >> >> >> > www.psych.umn.edu/research/tricam
> >> >> >> >
> >> >> >> >        [[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.
> >> >> >> >
> >> >> >> >
> >> >> >>
> >> >> >>
> >> >> >>
> >> >> >> --
> >> >> >> Joshua Wiley
> >> >> >> Ph.D. Student, Health Psychology
> >> >> >> Programmer Analyst II, ATS Statistical Consulting Group
> >> >> >> University of California, Los Angeles
> >> >> >> https://joshuawiley.com/
> >> >> >
> >> >> >
> >> >> >
> >> >> > --
> >> >> > Edward H. Patzelt
> >> >> > Research Assistant – TRiCAM Lab
> >> >> > University of Minnesota – Psychology/Psychiatry
> >> >> > VA Medical Center
> >> >> > Office: S355 Elliot Hall - Twin Cities Campus
> >> >> > Phone: 612-626-0072  Email: patze...@umn.edu
> >> >> >
> >> >> > Please consider the environment before printing this email
> >> >> > www.psych.umn.edu/research/tricam
> >> >>
> >> >>
> >> >>
> >> >> --
> >> >> Joshua Wiley
> >> >> Ph.D. Student, Health Psychology
> >> >> Programmer Analyst II, ATS Statistical Consulting Group
> >> >> University of California, Los Angeles
> >> >> https://joshuawiley.com/
> >> >
> >> >
> >> >
> >> > --
> >> > Edward H. Patzelt
> >> > Research Assistant – TRiCAM Lab
> >> > University of Minnesota – Psychology/Psychiatry
> >> > VA Medical Center
> >> > Office: S355 Elliot Hall - Twin Cities Campus
> >> > Phone: 612-626-0072  Email: patze...@umn.edu
> >> >
> >> > Please consider the environment before printing this email
> >> > www.psych.umn.edu/research/tricam
> >> >
> >>
> >>
> >>
> >> --
> >> Joshua Wiley
> >> Ph.D. Student, Health Psychology
> >> Programmer Analyst II, ATS Statistical Consulting Group
> >> University of California, Los Angeles
> >> https://joshuawiley.com/
> >
> >
> >
> > --
> > Edward H. Patzelt
> > Research Assistant – TRiCAM Lab
> > University of Minnesota – Psychology/Psychiatry
> > VA Medical Center
> > Office: S355 Elliot Hall - Twin Cities Campus
> > Phone: 612-626-0072  Email: patze...@umn.edu
> >
> > Please consider the environment before printing this email
> > www.psych.umn.edu/research/tricam
> >
>
>
>
> --
> Joshua Wiley
> Ph.D. Student, Health Psychology
> Programmer Analyst II, ATS Statistical Consulting Group
> University of California, Los Angeles
> https://joshuawiley.com/
>



-- 
Edward H. Patzelt
Research Assistant – TRiCAM Lab
University of Minnesota – Psychology/Psychiatry
VA Medical Center
Office: S355 Elliot Hall - Twin Cities Campus
Phone: 612-626-0072  Email: patze...@umn.edu

Please consider the environment before printing this email
www.psych.umn.edu/research/tricam

        [[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.

Reply via email to