Site icon R-bloggers

Operating on datasets inside a function

[This article was first published on Quantum Forest » rblogs, and kindly contributed to R-bloggers]. (You can report issue about the content on this page here)
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.

There are times when we need to write a function that makes changes to a generic data frame that is passed as an argument. Let’s say, for example, that we want to write a function that converts to factor any variable with names starting with a capital letter. There are a few issues involved in this problem, including:

CapitalFactors = function(dataset) {
  # Gets text version name of dataset
  data.name = substitute(dataset)

  # Loops over variable names of dataset
  # and extracts the ones that start with uppercase
  for(var.name in names(dataset)){
    if(substr(var.name, 1, 1) %in% LETTERS) {
      left = paste(data.name, '$', var.name, sep = '')
      right = paste('factor(', left, ')', sep = '')
      code = paste(left, '=', right)
      # Evaluates the parsed text, using the parent environment
      # so as to actually update the original data set
      eval(parse(text = code), envir = parent.frame())
    }
  }
}

# Create example dataset and display structure
example = data.frame(Fert = rep(1:2, each = 4),
                     yield = c(12, 9, 11, 13, 14, 13, 15, 14))
str(example)

'data.frame':	8 obs. of  2 variables:
 $ Fert : int  1 1 1 1 2 2 2 2
 $ yield: num  12 9 11 13 14 13 15 14

# Use function on dataset and display structure
CapitalFactors(example)
str(example)

'data.frame':	8 obs. of  2 variables:
 $ Fert : Factor w/ 2 levels "1","2": 1 1 1 1 2 2 2 2
 $ yield: num  12 9 11 13 14 13 15 14

And that’s all. Now the Fert integer variable has been converted to a factor. This example function could be useful for someone out there.

To leave a comment for the author, please follow the link and comment on their blog: Quantum Forest » rblogs.

R-bloggers.com offers daily e-mail updates about R news and tutorials about learning R and many other topics. Click here if you're looking to post or find an R/data-science job.
Want to share your content on R-bloggers? click here if you have a blog, or here if you don't.