如何删除包含NA的列或等于0的方差

时间:2015-05-29 01:15:48

标签: r dataframe

我想在做PCA之前scale我的数据,但遗憾的是我发现有些列包含NA,而某些列的方差等于0,我想删除这些列。这是我的数据的一个例子

df <- data.frame( v1 = 1:10 , v2 = rep( 0 , 10 ) , v3 = sample( c( 1:3 , NA ) , 10 , repl = TRUE ), v4 = 1:10 )

我想同时删除v2v3列。我该如何实现呢?

我知道如何删除包含NA的列,然后删除方差等于0的列。

colsd <- apply(df, 2, sd)
df2 <- df[!is.na(colsd)]
colsd2 <- apply(df2, 2, sd)
df3 <- df2[!colsd2 == 0]

但它看起来很冗余,我只是想知道我能否实现这个更高效,也许只是在一行。谢谢你的回复。

1 个答案:

答案 0 :(得分:5)

您可以尝试以下内容:

> df[!sapply(df, var) %in% c(0, NA)]
   v1 v4
1   1  1
2   2  2
3   3  3
4   4  4
5   5  5
6   6  6
7   7  7
8   8  8
9   9  9
10 10 10