如何省略矩阵中仅包含NA的列?

时间:2013-04-01 21:37:45

标签: r

我有一个矩阵,其中有许多列,其中所有值都是NA。 所以我想省略所有完全NA的列。那我怎么能这样做呢?

3 个答案:

答案 0 :(得分:3)

我假设您只想省略所有观察值为NA的列;你的问题有些含糊不清。

此代码省略了完全NA的列,对于矩阵x,仅返回至少有一个非NA值的列:

x[,apply(!is.na(x),2,any)] 

答案 1 :(得分:2)

mtx[ , -which( colSums(is.na(mtx)) == nrow(mtx) ) ]

如果您想要排除超过50%NA条目的列,那么:

mtx[ , -which( colSums(is.na(mtx)) > nrow(mtx)/2 ) ]

答案 2 :(得分:1)

您可以使用函数“na.omit()”删除包含NA观测值的行。此函数删除行并返回没有NA的数据帧。

如果您希望删除每个观察包含NA的列...

我不确定是否有内置的R函数来执行此操作。但是,我们可能会考虑使用某种用户定义的流程来删除具有最多NA的列...

### Assume 'df' is your data frame with observational data:

### Apply a function to check whether each observation contains an NA
count <- sapply(df, is.na)
### Within each column, ask for the number of missing observations
count <- colSums(count)
### Ask R which columns have the most missing observations
index <- which.max(count)
### Subset 'df' to exclude columns with the most NA's
df <- df[, -index]