Re: [R] replace values in data frame

From: Marc Schwartz (via MN) <mschwartz_at_mn.rr.com>
Date: Sat 08 Jul 2006 - 03:35:45 EST

Wade,

Given that you appear to have multiple search and replace items to deal with, here is a possible loop based "Global Search and Replace" solution:

gsr <- function(Source, Search, Replace) {
  if (length(Search) != length(Replace))     stop("Search and Replace Must Have Equal Number of Items\n")

  Changed <- as.character(Source)

  for (i in 1:length(Search))
  {
    cat("Replacing: ", Search[i], " With: ", Replace[i], "\n")     Changed <- replace(Changed, Changed == Search[i], Replace[i])   }

  cat("\n")   

  Changed
}

Source: The source vector, which will be coerced to character

Search: The Search values to be matched in "Source" as a character vector

Replace: The values that will replace those found in 'Search' on a one-for-one basis.

This function returns a character vector. As with replace(), the result must be assigned. The change is not done 'in place'. The function will also output the search and replace values to the console during the loop.

Again, using the iris dataset as an example:

> iris$Species

  [1] setosa     setosa     setosa     setosa     setosa     setosa    
  [7] setosa     setosa     setosa     setosa     setosa     setosa    

[13] setosa setosa setosa setosa setosa setosa
[19] setosa setosa setosa setosa setosa setosa
[25] setosa setosa setosa setosa setosa setosa
[31] setosa setosa setosa setosa setosa setosa
[37] setosa setosa setosa setosa setosa setosa
[43] setosa setosa setosa setosa setosa setosa
[49] setosa setosa versicolor versicolor versicolor versicolor
[55] versicolor versicolor versicolor versicolor versicolor versicolor
[61] versicolor versicolor versicolor versicolor versicolor versicolor
[67] versicolor versicolor versicolor versicolor versicolor versicolor
[73] versicolor versicolor versicolor versicolor versicolor versicolor
[79] versicolor versicolor versicolor versicolor versicolor versicolor
[85] versicolor versicolor versicolor versicolor versicolor versicolor
[91] versicolor versicolor versicolor versicolor versicolor versicolor
[97] versicolor versicolor versicolor versicolor virginica virginica
[103] virginica virginica virginica virginica virginica virginica [109] virginica virginica virginica virginica virginica virginica [115] virginica virginica virginica virginica virginica virginica [121] virginica virginica virginica virginica virginica virginica [127] virginica virginica virginica virginica virginica virginica [133] virginica virginica virginica virginica virginica virginica [139] virginica virginica virginica virginica virginica virginica [145] virginica virginica virginica virginica virginica virginica Levels: setosa versicolor virginica Note that iris$Species is a factor with specific levels. The gsr() function above will coerce the Source argument to a character vector internally and return a character vector: > iris$Species <- gsr(iris$Species, c("setosa", "versicolor", "virginica"), c("s1", "v1", "v2")) Replacing: setosa With: s1 Replacing: versicolor With: v1 Replacing: virginica With: v2 > iris$Species [1] "s1" "s1" "s1" "s1" "s1" "s1" "s1" "s1" "s1" "s1" "s1" "s1" "s1"
[14] "s1" "s1" "s1" "s1" "s1" "s1" "s1" "s1" "s1" "s1" "s1" "s1" "s1"
[27] "s1" "s1" "s1" "s1" "s1" "s1" "s1" "s1" "s1" "s1" "s1" "s1" "s1"
[40] "s1" "s1" "s1" "s1" "s1" "s1" "s1" "s1" "s1" "s1" "s1" "v1" "v1"
[53] "v1" "v1" "v1" "v1" "v1" "v1" "v1" "v1" "v1" "v1" "v1" "v1" "v1"
[66] "v1" "v1" "v1" "v1" "v1" "v1" "v1" "v1" "v1" "v1" "v1" "v1" "v1"
[79] "v1" "v1" "v1" "v1" "v1" "v1" "v1" "v1" "v1" "v1" "v1" "v1" "v1"
[92] "v1" "v1" "v1" "v1" "v1" "v1" "v1" "v1" "v1" "v2" "v2" "v2" "v2"
[105] "v2" "v2" "v2" "v2" "v2" "v2" "v2" "v2" "v2" "v2" "v2" "v2" "v2" [118] "v2" "v2" "v2" "v2" "v2" "v2" "v2" "v2" "v2" "v2" "v2" "v2" "v2"
[131] "v2" "v2" "v2" "v2" "v2" "v2" "v2" "v2" "v2" "v2" "v2" "v2" "v2" [144] "v2" "v2" "v2" "v2" "v2" "v2" "v2"

HTH, Marc Schwartz



R-help@stat.math.ethz.ch mailing list
https://stat.ethz.ch/mailman/listinfo/r-help PLEASE do read the posting guide! http://www.R-project.org/posting-guide.html Received on Sat Jul 08 03:40:19 2006

Archive maintained by Robert King, hosted by the discipline of statistics at the University of Newcastle, Australia.
Archive generated by hypermail 2.1.8, at Sat 08 Jul 2006 - 04:15:31 EST.

Mailing list information is available at https://stat.ethz.ch/mailman/listinfo/r-help. Please read the posting guide before posting to the list.