删除标准差为零的列

spo*_*234 4 r dataframe

我想从data.frame中删除标准差为零的所有列.

这不起作用:

  df <- df[, ! apply(df , 2 , function(x) sd(x)==0 ) ]
Run Code Online (Sandbox Code Playgroud)

我收到错误:

选择了未定义的列

UPDATE

我选择Filter了我的首选答案,因为它似乎也处理NAs,这是非常有用的.

例如,在

df <- data.frame(v1=c(0,0,NA,0,0), v2=1:5)
Run Code Online (Sandbox Code Playgroud)

Filterapply方法产生错误时,删除列'v1' .

感谢所有其他解决方案,我从他们那里学到了很多东西.

UPDATE2:

应用给出的那些错误可以通过添加na.rm = TRUE到sd的调用来修复,如下所示:

df[, ! apply(df , 2 , function(x) sd(x, na.rm = TRUE)==0 ) ]
Run Code Online (Sandbox Code Playgroud)

grr*_*bla 7

使用过滤器:

Filter(function(x) sd(x) != 0, df)
Run Code Online (Sandbox Code Playgroud)


Tim*_*sen 5

除了@grrgrrbla和@akrun的答案之外Filter,这里有正确的方法来做你原来的想法:

df <- df[, !sapply(df, function(x) { sd(x) == 0} )]
Run Code Online (Sandbox Code Playgroud)

要么

df <- df[, sapply(df, function(x) { sd(x) != 0} )]
Run Code Online (Sandbox Code Playgroud)

我曾经sapply()得到一个向量,TRUE当数据帧列的标准偏差为0时,FALSE否则.然后我使用该向量对原始数据帧进行子集化.