R语言 如何将R数据框中的因子列的水平设置为NA
一个数据框架可能包含属于不同类别的列。因素类型的列是一组分类变量,每个分类变量映射到一个独特的级别。这些级别让我们了解到数据变量之间的共生关系。这些级别可以使用R编程语言中的基础方法进行定量(增加/减少)和定性(数值修改)的修改。
方法1:使用level()方法
R编程语言中的level()方法可以访问一个变量的level属性。变量的所有级别都可以被分配到不同的值,甚至是缺失的值。因此,级别的映射会发生变化,级别可能会减少,这取决于级别分配给NA的数量。所有被分配等级的实例都会从数据框的输入变量列以及原始因子中删除。
语法:
levels(dfcol-name)[level(dfcol-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_framecol1)
# if value of column1 is b then replace
# by missing value
levels(data_framecol1)[levels(data_framecol1)=="b"]<-NA
print ("Modified DataFrame")
print (data_frame)
print ("Levels of col1")
levels(data_framecol1)
输出
[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 <NA> 8 e
6 <NA> 8 f
7 a 5 g
8 c 9 h
9 <NA> 8 i
10 c 9 j
11 c 8 k
12 c 8 l
13 a 6 m
14 <NA> 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_framecol1)
vec <- c("a","b")
# if value of column1 is b then replace
# by missing value
levels(data_framecol1)[levels(data_framecol1) %in% vec]<-NA
print ("Modified DataFrame")
print (data_frame)
print ("Levels of col1")
levels(data_framecol1)
输出
[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 <NA> 7 a
2 <NA> 5 b
3 <NA> 7 c
4 <NA> 5 d
5 <NA> 5 e
6 <NA> 10 f
7 c 8 g
8 c 5 h
9 <NA> 6 i
10 <NA> 8 j
11 <NA> 5 k
12 <NA> 10 l
13 <NA> 5 m
14 <NA> 6 n
15 c 8 o
[1] "Levels of col1"
[1] "c"
方法2:使用索引方法
可以使用==运算符对数据框架中的列进行检查,然后将其所有实例从数据框架中删除。然而,这种方法的效率较低,因为它只是将变量在数据框中的出现次数映射为NA,实际上并没有修改已经存在的层次数。
语法:
dfcol-name[dfcol-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_framecol1)
# if value of column1 is b then replace
# by missing value
data_framecol1[data_framecol1 == "b"] = NA
print ("Modified DataFrame")
print (data_frame)
print ("Levels of col1")
levels(data_framecol1)
输出
[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 <NA> 5 b
3 <NA> 6 c
4 c 5 d
5 c 7 e
6 c 10 f
7 <NA> 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 <NA> 10 n
15 a 7 o
[1] "Levels of col1"
[1] "a" "b" "c"