R语言移除缺失值NA.RM

> a <- 2:12
> b <- seq(2,23,2)
> c <- c(1:11)^3
> d <- c(5:8, 30:36)

> df <- data.frame(a,b,c,d)
> df$a[df$a==8] <- NA 
> df$b[df$b==8] <- NA 
> df$c[df$c==8] <- NA 
> df$d[df$d==8] <- NA 
> df$d[df$d==32] <- NA


> df
    a  b    c  d
1   2  2    1  5
2   3  4   NA  6
3   4  6   27  7
4   5 NA   64 NA
5   6 10  125 30
6   7 12  216 31
7  NA 14  343 NA
8   9 16  512 33
9  10 18  729 34
10 11 20 1000 35
11 12 22 1331 36

// 只根据第四列,也就是d 的 NA,移除相应的行
> bad.d <- is.na(df$d)
> bad.d
 [1] FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE FALSE FALSE FALSE
> df[!bad.d,]
    a  b    c  d
1   2  2    1  5
2   3  4   NA  6
3   4  6   27  7
5   6 10  125 30
6   7 12  216 31
8   9 16  512 33
9  10 18  729 34
10 11 20 1000 35
11 12 22 1331 36

// 根据第二列和第三列的NA 移除相应的行
> df[complete.cases(df[,2:3]),]
    a  b    c  d
1   2  2    1  5
3   4  6   27  7
5   6 10  125 30
6   7 12  216 31
7  NA 14  343 NA
8   9 16  512 33
9  10 18  729 34
10 11 20 1000 35
11 12 22 1331 36

// 根据第二列和 第四列的NA,移除相应的行
> df[complete.cases(df[,c(2,4)]),]
    a  b    c  d
1   2  2    1  5
2   3  4   NA  6
3   4  6   27  7
5   6 10  125 30
6   7 12  216 31
8   9 16  512 33
9  10 18  729 34
10 11 20 1000 35
11 12 22 1331 36

// 根据所有列的NA,移除相应的行
> df[complete.cases(df),]
    a  b    c  d
1   2  2    1  5
3   4  6   27  7
5   6 10  125 30
6   7 12  216 31
8   9 16  512 33
9  10 18  729 34
10 11 20 1000 35
11 12 22 1331 36
> 
// 这个效果跟上面的df[complete.cases(df),] 相同
> na.omit(df)
    a  b    c  d
1   2  2    1  5
3   4  6   27  7
5   6 10  125 30
6   7 12  216 31
8   9 16  512 33
9  10 18  729 34
10 11 20 1000 35
11 12 22 1331 36

// 计算某一列的平均值, 移除NA值
> mean(df$d, na.rm=TRUE)

本文标题:R语言移除缺失值NA.RM
文章分享:http://myzitong.com/article/ipdjec.html