删除含有NA的行或列很简单:
na.omit()
删除全为NA的行或列貌似没有内置的函数,不过实现也很简单,按行删按列删都可以:
# 先写成函数的形式,方便调用
removeRowsAllNa <- function(x){x[apply(x, 1, function(y) any(!is.na(y))),]}
removeColsAllNa <- function(x){x[, apply(x, 2, function(y) any(!is.na(y)))]}
# 非函数形式则更简短,其中 x 为 DataFrame 或 Matrix
x_RowsAllNa_removed = x[apply(x, 1, function(y) any(!is.na(y))),]
x_ColsAllNa_removed = x[, apply(x, 1, function(y) any(!is.na(y)))]
测试一下
a = data.frame("col1" = c(1, NA, 4), "col2" = c(2, NA, 5), "col3" = c(NA ,NA ,6))
na.omit(student)
> a
col1 col2 col3
1 1 2 NA
2 NA NA NA
3 4 5 NA
> na.omit(a)
[1] col1 col2 col3
<0 rows> (or 0-length row.names)
> removeRowsAllNa(a)
col1 col2 col3
1 1 2 NA
3 4 5 NA
> removeColsAllNa(a)
col1 col2
1 1 2
2 NA NA
3 4 5
非常的方便~
网友评论