ez.num: convert a column (or all columns) in a data frame, or a...

View source: R/basic.R

ez.numR Documentation

convert a column (or all columns) in a data frame, or a vector into numeric type, call type.convert or as.numeric

Description

convert a column (or all columns) in a data frame, or a vector into numeric type, call type.convert or as.numeric

Usage

ez.num(
  x,
  col = NULL,
  force = FALSE,
  print2scr = TRUE,
  na.strings = c("-", "", ".", "NA", "na", "N/A", "n/a", "NaN", "nan"),
  ...
)

Arguments

x

a character vector, data frame, list, or a factor

col

internally evaluated by eval('dplyr::select()')()
if x is a data frame, col is specified (e.g., "cond"), convert that col only
if x is a data frame, col is unspecified (i.e., NULL default), convert all cols in x
if x is not a data frame, col is ignored

force

T/F. a string vec/col that only has string of num or na.strings, eg c('1','2')->c(1,2) will always become num.
If T, convert everything (factor, etc) to character first then to numeric (no warning for NA coerce). Otherwise factor untouched, factor(1:2)->factor(1:2)
See example for more

na.strings

case sensitive strings that will be coverted to NA even if force=F. The function will NOT do a trimws(x,'both') before conversion, supposedly up to this step, spaces have already been trimmed.

Details

Both value and variable label attributes will be removed when converting variables to characters.

see http://stackoverflow.com/a/22701462/2292993

Value

returns a converted vector, data frame
with ez.2value if x is a factor with chars, will be converted to 1 2 3 etc, see its example
ez.num keeps the same char as is

See Also

ez.2value

Other data transformation functions: ez.2char(), ez.2factor(), ez.2label(), ez.2long(), ez.2lower(), ez.2value(), ez.2wide(), ez.compute(), ez.del(), ez.label.get(), ez.label.set(), ez.labels.get(), ez.labels.set(), ez.move(), ez.newcol(), ez.recode(), ez.recols(), ez.recol(), ez.rename(), ez.replace(), ez.rncols(), ez.rncol(), ez.select(), ez.sort(), ez.split(), ez.str(), ez.unique(), left_join()

Examples

ez.num(c(1,2,3,NA),force=T)                        # -> c(1,2,3,NA), no change, directly pass through
ez.num(c(1,2,3,NA),force=F)                        # -> c(1,2,3,NA), no change, directly pass through

ez.num(c('1','2','3',NA),force=F)                  # -> c(1,2,3,NA)
ez.num(c('1','2','3',NA),force=T)                  # -> c(1,2,3,NA)
ez.num(c('1','','NA',"N/A",NA),force=F)            # -> c(1,NA,NA,NA,NA)  # na.strings treated as NA even if force=F
ez.num(c('1','','NA',"N/A",NA),force=T)            # -> c(1,NA,NA,NA,NA)

ez.num(c('1','N/A','a',"NA",NA),force=F)           # -> same vector # more than na.strings
ez.num(c('1','N/A','a',"NA",NA),force=T)           # -> c(1,NA,NA,NA,NA)

ez.num(factor(c(1,2,3,NA)),force=F)                # -> factor [1,2,3,NA]
ez.num(factor(c(1,2,3,NA)),force=T)                # -> c(1,2,3,NA)
ez.num(factor(c('1','2','3',NA)),force=F)          # -> factor [1,2,3,NA]
ez.num(factor(c('1','2','3',NA)),force=T)          # -> c(1,2,3,NA)
ez.num(factor(c('1','','NA',"N/A",NA)),force=F)    # -> factor ['1','','NA',"N/A",NA]
ez.num(factor(c('1','','NA',"N/A",NA)),force=T)    # -> c(1,NA,NA,NA,NA)
ez.num(factor(c('1','N/A','a',"NA",NA)),force=F)   # -> same factor # more than na.strings
ez.num(factor(c('1','N/A','a',"NA",NA)),force=T)   # -> c(1,NA,NA,NA,NA)

d <- data.frame(char = letters[1:5],
                fake_char = as.character(1:5),
                fac = factor(1:5),
                char_fac = factor(letters[1:5]),
                mixed_char = c(1,2,'N/A','4','f'),
                num = 1:5, stringsAsFactors = FALSE)
#   char fake_char fac char_fac mixed_char num
# 1    a         1   1        a          1   1
# 2    b         2   2        b          2   2
# 3    c         3   3        c        N/A   3
# 4    d         4   4        d          4   4
# 5    e         5   5        e          f   5
sapply(d, class)
#        char   fake_char         fac    char_fac  mixed_char         num
# "character" "character"    "factor"    "factor" "character"   "integer"
sapply(ez.num(d), class)
       char   fake_char         fac    char_fac  mixed_char         num
"character"   "integer"    "factor"    "factor" "character"   "integer"
ez.num(d,col=NULL,force=F)
ez.num(d,col=NULL,force=T)
ez.num(d,col=c("char","mixed_char"),force=F)
ez.num(d,col=c("char","mixed_char"),force=T)

jerryzhujian9/ezmisc documentation built on March 9, 2024, 12:44 a.m.