from 阿雷边学边教
缺失值NA(Not Available)
- 数据源中缺少的数据
- 由于记录错误产生了一些不符合常理的值
**处理缺失值的方法 - 判断是否为缺失值:
is.na()
- 对于不符合常理的值定义为缺失值:
df$column[df$column==value] <- NA
- 替换掉缺失值:
df[is.na(df)] <- value
- 排除缺失值:1.有些函数自带的
na.rm=TRUE
选项;2.na.omit()
可以将含有缺失值的一整行都移除掉,此函数请慎用。
> ID <- paste("A","00",1:5,sep = "")
> age <- c(24,NA,35,19,-20)
> df1<-data.frame(ID,age)
> df1
ID age
1 A001 24
2 A002 NA
3 A003 35
4 A004 19
5 A005 -20
#判断有无缺失值
> is.na(df1)
ID age
[1,] FALSE FALSE
[2,] FALSE TRUE
[3,] FALSE FALSE
[4,] FALSE FALSE
[5,] FALSE FALSE
#将不符合常理的值定义为缺失值
> df1$age[df1$age<0]<-NA
> df1
ID age
1 A001 24
2 A002 NA
3 A003 35
4 A004 19
5 A005 NA
#替换掉缺失值
> df1[is.na(df1)] <- mean(df1$age)
> df1
ID age
1 A001 24
2 A002 NA
3 A003 35
4 A004 19
5 A005 NA
##替换失败是因为在求平均值的时候是以原来所有age为基数的,而实际上这些数字里面有缺失值NA,所以mean值替换失败,如果需要达到将NA值替换为mean值的目的,则需要将NA删除,代码如下:
> df1[is.na(df1)] <- mean(df1$age,na.rm = T)
> df1
ID age
1 A001 24
2 A002 26
3 A003 35
4 A004 19
5 A005 26
> df1<-data.frame(ID,age)
> na.omit(df1)
ID age
1 A001 24
3 A003 35
4 A004 19
5 A005 -20
网友评论