如何将 R 数据框中的因子列的级别设置为 NA?
一个数据框可能包含属于不同类的列。因子类型列是一组分类变量,每个变量都映射到一个唯一的级别。这些级别让我们了解数据变量之间的共病。这些级别可以使用 R 编程语言中的基本方法进行定量(增加/减少)和定性(值修改)修改。
方法 1:使用 levels() 方法
R 编程语言中的 levels() 方法可以访问变量的 levels 属性。变量的所有水平都可以分配给不同的值,甚至是缺失值。因此,根据分配给 NA 的级别数,级别的映射会发生变化并且级别可能会降低。从数据框的输入变量列中删除的指定级别的所有实例以及原始因子。
句法:
levels(df$col-name)[levels(df$col-name) == val ] <- 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%运算符用于检查向量或列表对象中是否存在值。它根据值是否存在返回一个逻辑值。
句法:
val %in% vec
使用 %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,而实际上并未修改已存在的级别数。
句法:
df$col-name[df$col-name == val] = 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"