On Jun 7, 2012, at 07:28 , Bert Gunter wrote: > Actually, recycling makes the rep(NA,2) business unnecessary. Simply: > > dat1[dat1$x==1 & dat1$y==1,1:2] <- rep(NA,2) > > ##or > > with(dat1,{dat1[x==1 & y==1,1:2] <- NA;dat1}) > > will do it. >
Or, use the assignment form of is.na: cond <- with(dat1, x==1 & y==1) is.na(dat1$x) <- cond is.na(dat1$y) <- cond This is said to be somewhat safer if you are modifying factors (avoids potential confusion if NA is a level). -pd > -- Bert > > > On Wed, Jun 6, 2012 at 10:21 PM, Bert Gunter <bgun...@gene.com> wrote: >> Have you read "An Intro to R?" If not,please do so before posting >> further. The way you are going about things makes me think you >> haven't, but ... >> >> This **is** a slightly tricky application of indexing, if I understand >> you correctly. Here are two essentially identical ways to do it, but >> the second is a little trickier >> >> ## First >>> dat1[dat1$x==1 & dat1$y==1,1:2] <- rep(NA,2) >>> dat1 >> x y fac >> 1 <NA> <NA> A >> 2 1 2 B >> 3 1 3 A >> 4 <NA> <NA> C >> 5 1 2 A >> 6 1 3 C >> >> ##Slightly trickier version using with() to avoid explicit extraction >> from data frame >> ## Reconstitute dat1 >> >>> dat1 >> x y fac >> 1 1 1 C >> 2 1 2 C >> 3 1 3 B >> 4 1 1 B >> 5 1 2 C >> 6 1 3 B >> >> dat1 <- with(dat1,{dat1[x==1 & y==1,1:2] <- rep(NA,2); dat1}) >>> dat1 >> x y fac >> 1 <NA> <NA> B >> 2 1 2 A >> 3 1 3 A >> 4 <NA> <NA> C >> 5 1 2 A >> 6 1 3 B >> >> ## ?with for explanation >> >> -- Bert >> >> On Wed, Jun 6, 2012 at 8:58 PM, Daisy Englert Duursma >> <daisy.duur...@gmail.com> wrote: >>> Hello and thanks for helping. >>> >>> #some data >>> L3 <- LETTERS[1:3] >>> dat1 <- data.frame(cbind(x=1, y=rep(1:3,2), fac=sample(L3, 6, >>> replace=TRUE))) >>> >>> >>> #When x==1 and y==1 I want to replace the 1 values with NA >>> >>> #I can select the rows I want: >>> dat2<-subset(dat1,x==1 & y==1) >>> #replace the 1 with NA >>> dat2$x<-rep(NA,nrow(dat2) >>> dat2$y<-rep(NA,nrow(dat2) >>> >>> #select the other rows and rbind everything back together >>> #This is where I get stuck >>> >>> #The end dataframe will look something like: >>> >>> x y fac >>> NA NA B >>> NA NA A >>> 1 2 C >>> 1 3 C >>> 1 2 C >>> 1 3 A >>> >>> #Is there a better way to do this where I do not need to subset >>> perhaps using lapply? >>> >>> >>> Thanks, >>> Daisy >>> >>> -- >>> Daisy Englert Duursma >>> Department of Biological Sciences >>> Room E8C156 >>> Macquarie University, North Ryde, NSW 2109 >>> Australia >>> >>> Tel +61 2 9850 9256 >>> >>> ______________________________________________ >>> 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. >> >> >> >> -- >> >> Bert Gunter >> Genentech Nonclinical Biostatistics >> >> Internal Contact Info: >> Phone: 467-7374 >> Website: >> http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm > > > > -- > > Bert Gunter > Genentech Nonclinical Biostatistics > > Internal Contact Info: > Phone: 467-7374 > Website: > http://pharmadevelopment.roche.com/index/pdb/pdb-functional-groups/pdb-biostatistics/pdb-ncb-home.htm > > ______________________________________________ > 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. -- Peter Dalgaard, Professor, Center for Statistics, Copenhagen Business School Solbjerg Plads 3, 2000 Frederiksberg, Denmark Phone: (+45)38153501 Email: pd....@cbs.dk Priv: pda...@gmail.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.