📌  相关文章
📜  如何将 R 数据框中的因子列的级别设置为 NA?

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

如何将 R 数据框中的因子列的级别设置为 NA?

一个数据框可能包含属于不同类的列。因子类型列是一组分类变量,每个变量都映射到一个唯一的级别。这些级别让我们了解数据变量之间的共病。这些级别可以使用 R 编程语言中的基本方法进行定量(增加/减少)和定性(值修改)修改。

方法 1:使用 levels() 方法

R 编程语言中的 levels() 方法可以访问变量的 levels 属性。变量的所有水平都可以分配给不同的值,甚至是缺失值。因此,根据分配给 NA 的级别数,级别的映射会发生变化并且级别可能会降低。从数据框的输入变量列中删除的指定级别的所有实例以及原始因子。

句法:

例子:



R
# declaring columns of data frame
col1 <-as.factor(sample(letters[1:3],15,replace=TRUE))
col2<-sample(5:10,15,replace=TRUE)
col3 <- letters[1:15]
  
# creating a data frame
data_frame <- data.frame(col1, col2, col3)
print ("Original DataFrame")
print (data_frame)
  
# getting levels of col1
print ("Levels of col1")
levels(data_frame$col1)
  
# if value of column1 is b then replace
# by missing value
levels(data_frame$col1)[levels(data_frame$col1)=="b"]<-NA
  
print ("Modified DataFrame")
print (data_frame)
  
print ("Levels of col1")
levels(data_frame$col1)


R
# declaring columns of data frame
col1 <-as.factor(sample(letters[1:3],15,replace=TRUE))
col2<-sample(5:10,15,replace=TRUE)
col3 <- letters[1:15]
  
# creating a data frame
data_frame <- data.frame(col1, col2, col3)
print ("Original DataFrame")
print (data_frame)
  
# getting levels of col1
print ("Levels of col1")
levels(data_frame$col1)
vec <- c("a","b")
  
# if value of column1 is b then replace 
# by missing value
levels(data_frame$col1)[levels(data_frame$col1) %in% vec]<-NA
  
print ("Modified DataFrame")
print (data_frame)
  
print ("Levels of col1")
levels(data_frame$col1)


R
# declaring columns of data frame
col1 <-as.factor(sample(letters[1:3],15,replace=TRUE))
col2<-sample(5:10,15,replace=TRUE)
col3 <- letters[1:15]
  
# creating a data frame
data_frame <- data.frame(col1, col2, col3)
print ("Original DataFrame")
print (data_frame)
  
# getting levels of col1
print ("Levels of col1")
levels(data_frame$col1)
  
# if value of column1 is b then replace 
# by missing value
data_frame$col1[data_frame$col1 == "b"] = NA
  
print ("Modified DataFrame")
print (data_frame)
  
print ("Levels of col1")
levels(data_frame$col1)


输出

[1] "Original DataFrame"
  col1 col2 col3
1     a    8    a
2     c   10    b
3     c    9    c
4     a    8    d
5     b    8    e
6     b    8    f
7     a    5    g
8     c    9    h
9     b    8    i
10    c    9    j
11    c    8    k
12    c    8    l
13    a    6    m
14    b   10    n
15    c    6    o
[1] "Levels of col1"
[1] "a" "b" "c"
[1] "Modified DataFrame"
  col1 col2 col3
1     a    8    a
2     c   10    b
3     c    9    c
4     a    8    d
5      8    e
6      8    f
7     a    5    g
8     c    9    h
9      8    i
10    c    9    j
11    c    8    k
12    c    8    l
13    a    6    m
14    10    n
15    c    6    o
[1] "Levels of col1"
[1] "a" "c"

R 语言中的 %in%运算符用于检查向量或列表对象中是否存在值。它根据值是否存在返回一个逻辑值。

句法:

使用 %in%运算符,可以检查多个值,也可以同时将多个级别分配给 NA。

例子:

电阻



# declaring columns of data frame
col1 <-as.factor(sample(letters[1:3],15,replace=TRUE))
col2<-sample(5:10,15,replace=TRUE)
col3 <- letters[1:15]
  
# creating a data frame
data_frame <- data.frame(col1, col2, col3)
print ("Original DataFrame")
print (data_frame)
  
# getting levels of col1
print ("Levels of col1")
levels(data_frame$col1)
vec <- c("a","b")
  
# if value of column1 is b then replace 
# by missing value
levels(data_frame$col1)[levels(data_frame$col1) %in% vec]<-NA
  
print ("Modified DataFrame")
print (data_frame)
  
print ("Levels of col1")
levels(data_frame$col1)

输出

[1] "Original DataFrame"
  col1 col2 col3
1     a    7    a
2     b    5    b
3     b    7    c
4     a    5    d
5     b    5    e
6     a   10    f
7     c    8    g
8     c    5    h
9     a    6    i
10    a    8    j
11    a    5    k
12    b   10    l
13    b    5    m
14    b    6    n
15    c    8    o
[1] "Levels of col1"
[1] "a" "b" "c"
[1] "Modified DataFrame"
  col1 col2 col3
1      7    a
2      5    b
3      7    c
4      5    d
5      5    e
6     10    f
7     c    8    g
8     c    5    h
9      6    i
10     8    j
11     5    k
12    10    l
13     5    m
14     6    n
15    c    8    o
[1] "Levels of col1"
[1] "c"

方法二:使用索引法

可以使用 ==运算符根据数据框列检查所需的值,然后可以删除数据框中的所有实例。但是,此方法效率较低,因为它仅将变量的出现映射到数据框中的 NA,而实际上并未修改已存在的级别数。

句法:

例子:

电阻

# declaring columns of data frame
col1 <-as.factor(sample(letters[1:3],15,replace=TRUE))
col2<-sample(5:10,15,replace=TRUE)
col3 <- letters[1:15]
  
# creating a data frame
data_frame <- data.frame(col1, col2, col3)
print ("Original DataFrame")
print (data_frame)
  
# getting levels of col1
print ("Levels of col1")
levels(data_frame$col1)
  
# if value of column1 is b then replace 
# by missing value
data_frame$col1[data_frame$col1 == "b"] = NA
  
print ("Modified DataFrame")
print (data_frame)
  
print ("Levels of col1")
levels(data_frame$col1)

输出

[1] "Original DataFrame"
  col1 col2 col3
1     c    7    a
2     b    5    b
3     b    6    c
4     c    5    d
5     c    7    e
6     c   10    f
7     b    7    g
8     a    9    h
9     c    9    i
10    a    8    j
11    c    9    k
12    a   10    l
13    a    8    m
14    b   10    n
15    a    7    o
[1] "Levels of col1"
[1] "a" "b" "c"
[1] "Modified DataFrame"
  col1 col2 col3
1     c    7    a
2      5    b
3      6    c
4     c    5    d
5     c    7    e
6     c   10    f
7      7    g
8     a    9    h
9     c    9    i
10    a    8    j
11    c    9    k
12    a   10    l
13    a    8    m
14    10    n
15    a    7    o
[1] "Levels of col1"
[1] "a" "b" "c"