应用而不是循环

时间:2016-02-19 14:17:29

标签: r

我正在使用for循环来删除标准差= 0的数据集的每一列。我想用apply函数来做,你有什么想法吗?

sds<-apply(Dataset,2,sd, na.rm = FALSE)

counter=0
for(i in 1:length(sds)){
  if(sds[i]==0){
    Dataset<-Dataset[,-(i+5-counter)]
    counter=counter+1
  }
}

1 个答案:

答案 0 :(得分:1)

我们可以使用Filter

Filter(sd, Dataset)
#  col2         col3
#1     1 -0.545880758
#2     2  0.536585304
#3     3  0.419623149
#4     4 -0.583627199
#5     5  0.847460017
#6     6  0.266021979
#7     7  0.444585270
#8     8 -0.466495124
#9     9 -0.848370044
#10   10  0.002311942

sapply(Dataset, sd)
#     col1      col2      col3 
#0.0000000 3.0276504 0.5798524 

或使用

Dataset[sapply(Dataset,sd)!=0]

数据

set.seed(24)
Dataset <- data.frame(col1 = 1, col2 = 1:10, col3 = rnorm(10))