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/ ______________________________________________ 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.