> 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)