📜  R – 因素

📅  最后修改于: 2022-05-13 01:55:49.051000             🧑  作者: Mango

R – 因素

R 编程语言中的因素是用于对数据进行分类或表示分类数据并将其存储在多个级别上的数据结构。

它们可以存储为整数,每个唯一整数都有对应的标签。尽管因子可能看起来类似于字符向量,但它们是整数,在将它们用作字符串时必须小心。该因子仅接受有限数量的不同值。例如,诸如性别之类的数据字段可能只包含来自女性、男性或跨性别的值。

在上面的例子中,所有可能的情况都是预先知道的并且是预定义的。这些不同的值称为级别。创建因子后,它仅包含默认按字母顺序排序的级别。

R语言中因子的属性

  • x:是需要转换成因子的向量。
  • 级别:它是一组不同的值,被赋予输入向量 x。
  • 标签:它是一个与标签数量相对应的字符向量。
  • 排除:这将提及您要排除的所有值。
  • 有序:此逻辑属性决定级别是否有序。
  • nmax:将决定最大级别数的上限。

在 R 编程语言中创建一个因子

在 R 语言中用于创建或修改因子的命令是-factor() ,以向量作为输入。
创建因子的两个步骤是:

  • 创建向量
  • 使用函数factor() 将创建的向量转换为因子

示例:让我们创建一个具有女性、男性和跨性别级别的因素性别。

R
# Creating a vector
x < -c("female", "male", "male", "female")
print(x)
 
# Converting the vector x into a factor
# named gender
gender < -factor(x)
print(gender)


R
# Creating a factor with levels defined by programmer
gender <- factor(c("female", "male", "male", "female"),
          levels = c("female", "transgender", "male"));
gender


R
gender <- factor(c("female", "male", "male", "female"));
print(is.factor(gender))


R
gender <- factor(c("female", "male", "male", "female"));
class(gender)


R
gender <- factor(c("female", "male", "male", "female"));
gender[3]


R
gender <- factor(c("female", "male", "male", "female"));
gender[c(2, 4)]


R
gender <- factor(c("female", "male", "male", "female"  ));
gender[-3]


R
gender <- factor(c("female", "male", "male", "female"  ));
gender[2]<-"female"
gender


R
gender <- factor(c("female", "male", "male", "female"  ));
 
# add new level
levels(gender) <- c(levels(gender), "other")   
gender[3] <- "other"
gender


R
age <- c(40, 49, 48, 40, 67, 52, 53) 
salary <- c(103200, 106200, 150200,
            10606, 10390, 14070, 10220)
gender <- c("male", "male", "transgender",
            "female", "male", "female", "transgender")
employee<- data.frame(age, salary, gender) 
print(employee) 
print(is.factor(employee$gender))


输出:

[1] "female" "male"   "male"   "female"
[1] female male   male   female
Levels: female male

级别也可以由程序员预定义。

R

# Creating a factor with levels defined by programmer
gender <- factor(c("female", "male", "male", "female"),
          levels = c("female", "transgender", "male"));
gender

输出:

[1] female male   male   female
Levels: female transgender male

此外,可以使用函数levels()检查因子的水平。

检查 R 中的因子

函数is.factor()用于检查变量是否为因子,如果是因子则返回“TRUE”。

R

gender <- factor(c("female", "male", "male", "female"));
print(is.factor(gender))

输出:

[1] TRUE

函数class()还用于检查变量是否为因子,如果为真则返回“因子”。

R

gender <- factor(c("female", "male", "male", "female"));
class(gender)

输出:

[1] "factor" 

在 R 中访问因子的元素

就像我们访问向量的元素一样,我们访问因子的元素也是如此。如果性别是一个因素,那么性别[i] 将意味着访问因素中的第 i元素。

例子:

R

gender <- factor(c("female", "male", "male", "female"));
gender[3]

输出:

[1] male
Levels: female male

一次可以访问多个元素。

例子:

R

gender <- factor(c("female", "male", "male", "female"));
gender[c(2, 4)]

输出:

[1] male   female
Levels: female male

例子:

R

gender <- factor(c("female", "male", "male", "female"  ));
gender[-3]

输出:

[1] female male   female
Levels: female male

R中因子的修改

形成因子后,可以修改其组成部分,但需要分配的新值必须处于预定义的级别。

例子:

R

gender <- factor(c("female", "male", "male", "female"  ));
gender[2]<-"female"
gender

输出:

[1] female female male   female
Levels: female male

要选择除第 i 个元素之外的因素性别的所有元素,应使用性别[-i]。因此,如果您想修改一个因子并在预定义的级别之外添加值,那么首先修改级别。

例子:

R

gender <- factor(c("female", "male", "male", "female"  ));
 
# add new level
levels(gender) <- c(levels(gender), "other")   
gender[3] <- "other"
gender

输出:

[1] female male   other  female
Levels: female male other 

数据框中的因素

数据框类似于 2D 数组,其列包含一个变量的所有值,行包含来自每一列的一组值。关于数据帧有四点需要记住:

  • 列名是强制性的,不能为空。
  • 应该为每一行分配唯一的名称。
  • 数据框的数据只能是三种类型——因子、数字和字符类型。
  • 每列中必须存在相同数量的数据项。

在 R 语言中,当我们创建数据框时,它的列是分类数据,因此会自动在其上创建一个因子。
我们可以创建一个数据框并检查它的列是否是一个因素。

例子:

R

age <- c(40, 49, 48, 40, 67, 52, 53) 
salary <- c(103200, 106200, 150200,
            10606, 10390, 14070, 10220)
gender <- c("male", "male", "transgender",
            "female", "male", "female", "transgender")
employee<- data.frame(age, salary, gender) 
print(employee) 
print(is.factor(employee$gender))

输出:

age salary      gender
1  40 103200        male
2  49 106200        male
3  48 150200 transgender
4  40  10606      female
5  67  10390        male
6  52  14070      female
7  53  10220 transgender
[1] TRUE