Hi All, Im interested in creating a function that will convert a variable within a data.frame to a factor while retaining the original name (yes, I know that I can just: var <-factor(var) but I need it as a function for other purposes). e.g.: # this was an attempt but fails. facts <- function(meta, mod, modname = "spec") { meta$mod <- factor(meta$mod) colnames(meta)['mod'] <- modname return(meta) } # ideally, would like to just specify the data.frame (=meta) and # variable to convert to factor (=mod) (similar to function input below). But am # also interested in having the option to create a new variable and # name (similar to the function input above). facts <- function(meta, mod) { meta$mod <- factor(meta$mod) return(meta) } Thanks for any help! AC [[alternative HTML version deleted]]
How about this? It changes a column to a factor, and optionally renames it. facts <- function(meta, mod, newmodname) { meta[,mod] <- factor(meta[,mod]) if(!missing(newmodname)) { colnames(meta)[colnames(meta) == mod] <- newmodname } meta }> testdata <- data.frame(a=c(1,2,3), b=c(1,1,2)) > str(testdata)'data.frame': 3 obs. of 2 variables: $ a: num 1 2 3 $ b: num 1 1 2> > test1 <- facts(testdata, "a") > str(test1)'data.frame': 3 obs. of 2 variables: $ a: Factor w/ 3 levels "1","2","3": 1 2 3 $ b: num 1 1 2> > test2 <- facts(testdata, "b", "newb") > str(test2)'data.frame': 3 obs. of 2 variables: $ a : num 1 2 3 $ newb: Factor w/ 2 levels "1","2": 1 1 2 Sarah On Wed, Mar 17, 2010 at 3:06 PM, AC Del Re <delre at wisc.edu> wrote:> Hi All, > > Im interested in creating a function that will convert a variable within a > data.frame to a factor while retaining the original name (yes, I know that I > can just: ?var <-factor(var) but I need it as a ?function for other > purposes). e.g.: > > # this was an attempt but fails. > > facts <- function(meta, mod, modname = "spec") { > ?meta$mod <- factor(meta$mod) > ?colnames(meta)['mod'] <- modname > ?return(meta) > } > > # ideally, would like to just specify the data.frame (=meta) and > # variable to convert to factor (=mod) (similar to function input below). > But am > # also interested in having the option to create a new variable and > # name (similar to the function input above). > > facts <- function(meta, mod) { > ?meta$mod <- factor(meta$mod) > ?return(meta) > } > > Thanks for any help! > > AC >-- Sarah Goslee http://www.functionaldiversity.org
Try this: transform(DF, newA = factor(a), a = NULL) On Wed, Mar 17, 2010 at 4:06 PM, AC Del Re <delre at wisc.edu> wrote:> Hi All, > > Im interested in creating a function that will convert a variable within a > data.frame to a factor while retaining the original name (yes, I know that I > can just: ?var <-factor(var) but I need it as a ?function for other > purposes). e.g.: > > # this was an attempt but fails. > > facts <- function(meta, mod, modname = "spec") { > ?meta$mod <- factor(meta$mod) > ?colnames(meta)['mod'] <- modname > ?return(meta) > } > > # ideally, would like to just specify the data.frame (=meta) and > # variable to convert to factor (=mod) (similar to function input below). > But am > # also interested in having the option to create a new variable and > # name (similar to the function input above). > > facts <- function(meta, mod) { > ?meta$mod <- factor(meta$mod) > ?return(meta) > } > > Thanks for any help! > > AC > > ? ? ? ?[[alternative HTML version deleted]] > > ______________________________________________ > R-help at 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. >-- Henrique Dallazuanna Curitiba-Paran?-Brasil 25? 25' 40" S 49? 16' 22" O