我想在做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 )
我想同时删除v2
和v3
列。我该如何实现呢?
我知道如何删除包含NA
的列,然后删除方差等于0的列。
colsd <- apply(df, 2, sd)
df2 <- df[!is.na(colsd)]
colsd2 <- apply(df2, 2, sd)
df3 <- df2[!colsd2 == 0]
但它看起来很冗余,我只是想知道我能否实现这个更高效,也许只是在一行。谢谢你的回复。
答案 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