[R] Changing multiple instances in data.frame

David Winsemius dwinsemius at comcast.net
Thu Mar 29 00:11:06 CEST 2012


On Mar 28, 2012, at 5:26 PM, Trevor Davies wrote:

> I've looked but I cannot find a more elegant solution.
>
> I would like to be able to scan through a data.frame and remove  
> multiple
> and various instances of certain contents.
>
> A trivial example is below.  It works, it just seems like there  
> should be a
> one line solution.
>
> #Example data:
> a <-
> data 
> .frame 
> (V1 
> = 
> 1 
> : 
> 3,V2=c(paste(LETTERS[1],LETTERS[1:3],sep='')),options(stringsAsFactors
> = FALSE))
>
> #> a
> # V1 V2
> #1  1 AA
> #2  2 AB
> #3  3 AC
>
> #Cumbersome solution (which would be even more cumbersome with real  
> data)
>
> indices.of.aa <- which(a$V2 %in% "AA")
> indices.of.ab <- which(a$V2 %in% "AB")
> indices.of.ac <- which(a$V2 %in% "AC")
> a$V2 <- replace(a$V2, indices.of.aa, "c")
> a$V2 <- replace(a$V2, indices.of.ab, "d")
> a$V2 <- replace(a$V2, indices.of.ac, "e")
>

Use match:

 > df1 <- data.frame(V1=1:3,V2=c(paste(LETTERS[1],LETTERS[1:3],sep='')),
                   stringsAsFactors = FALSE))
 > unique(df1$V2)
[1] "AA" "AB" "AC"
 > df1$new <- c("c","d","e")[match(df1$V2, unique(df1$V2))]
 > df1
   V1 V2 new
1  1 AA   c
2  2 AB   d
3  3 AC   e



> ## output
> #> a
> #  V1 V2
> #1  1  c
> #2  2  d
> #3  3  e
>
> I know with the trivial example above there are extremely simple  
> solutions
> but my data.frame is a few thousand rows.
> Thanks all.
> Trevor
>
> 	[[alternative HTML version deleted]]


---
David Winsemius, MD
West Hartford, CT



More information about the R-help mailing list