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