These are shots in the dark, but you could try: running it in a clean R session with only the necessary packages and data loaded; testing on subsets of your data; examing the classes of all your variables and make sure they are what is expexted; upgrading your version of R.
I just retested this on: R version 2.12.1 (2010-12-16) Platform: x86_64-pc-mingw32/x64 (64-bit) locale: [1] LC_COLLATE=English_United States.1252 [2] LC_CTYPE=English_United States.1252 [3] LC_MONETARY=English_United States.1252 [4] LC_NUMERIC=C [5] LC_TIME=English_United States.1252 attached base packages: [1] grid splines stats graphics grDevices utils datasets [8] methods base other attached packages: [1] car_2.0-9 survival_2.36-5 nnet_7.3-1 MASS_7.3-11 again without issue, so I am thinking there must be something particular perhaps to your session going on, but it is difficult to say. On Mon, Aug 8, 2011 at 9:35 AM, Edward Patzelt <patze...@umn.edu> wrote: > 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 > -- Joshua Wiley Ph.D. Student, Health Psychology Programmer Analyst II, ATS Statistical Consulting Group University of California, Los Angeles https://joshuawiley.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.