因子用于存储不同类别的数据类型,例如人的性别有男和女两个类别,年龄来分可以有未成年人和成年人。

R 语言创建因子使用 factor() 函数,向量作为输入参数。

factor() 函数语法格式:

factor(x = character(), levels, labels = levels, exclude = NA, ordered = is.ordered(x), nmax = NA)

参数说明:

x:向量。
  • levels:指定各水平值, 不指定时由x的不同值来求得。
  • labels:水平的标签, 不指定时用各水平值的对应字符串。
  • exclude:排除的字符。
  • ordered:逻辑值,用于指定水平是否有序。
  • nmax:水平的上限数量。
  • 以下实例把字符型向量转换成因子:

    x <- c ( "男" , "女" , "男" , "男" , "女" )
    sex <- factor ( x )
    print ( sex )
    print ( is. factor ( sex ) )

    执行以上代码输出结果为:

    [1] 男 女 男 男 女
    Levels: 男 女
    [1] TRUE

    以下实例设置因子水平为 c('男','女')

    x <- c ( "男" , "女" , "男" , "男" , "女" , levels = c ( '男' , '女' ) )
    sex <- factor ( x )
    print ( sex )
    print ( is. factor ( sex ) )

    执行以上代码输出结果为:

    levels1 levels2 
    男      女      男      男      女      男      女 
    Levels: 男 女
    [1] TRUE

    因子水平标签

    接下来我们使用 labels 参数为每个因子水平添加标签,labels 参数的字符顺序,要和 levels 参数的字符顺序保持一致,例如:

    sex = factor ( c ( 'f' , 'm' , 'f' , 'f' , 'm' ) , levels = c ( 'f' , 'm' ) , labels = c ( 'female' , 'male' ) , ordered = TRUE )
    print ( sex )

    执行以上代码输出结果为:

    [1] female male   female female male  
    Levels: female < male

    生成因子水平

    我们可以使用 gl() 函数来生成因子水平,语法格式如下:

    gl(n, k, length = n*k, labels = seq_len(n), ordered = FALSE)

    参数说明:

    n : 设置 level 的个数 k : 设置每个 level 重复的次数
  • length : 设置长度
  • labels : 设置 level 的值
  • ordered : 设置是否 level 是排列好顺序的,布尔值。 v <- gl ( 3 , 4 , labels = c ( "Google" , "Runoob" , "Taobao" ) )
    print ( v )

    执行以上代码输出结果为:

    [1] Google Google Google Google Runoob Runoob Runoob Runoob Taobao Taobao [11] Taobao Taobao Levels: Google Runoob Taobao
  •