我想scale在做PCA之前得到我的数据,但不幸的是我发现有些列包含NA,而某些列的方差等于0,我想删除这些列.这是我的数据的一个例子
df <- data.frame( v1 = 1:10 , v2 = rep( 0 , 10 ) , v3 = sample( c( 1:3 , NA ) , 10 , repl = TRUE ), v4 = 1:10 )
Run Code Online (Sandbox Code Playgroud)
我想同时删除v2和v3列.我该如何实现呢?
我知道如何删除列包含NA,然后删除方差等于0的列.
colsd <- apply(df, 2, sd)
df2 <- df[!is.na(colsd)]
colsd2 <- apply(df2, 2, sd)
df3 <- df2[!colsd2 == 0]
Run Code Online (Sandbox Code Playgroud)
但它看起来很冗余,我只是想知道我能否实现这个更高效,也许只是在一条线上.谢谢你的回复.
您可以尝试以下方式:
> 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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
67 次 |
| 最近记录: |