删除数据框中方差最小的列。(R)

删除数据框中方差最小的列。(R),r,dataframe,R,Dataframe,我有一个包含1000个观察值和100个变量的数据框df,我想删除一些变量,更准确地说,我想删除方差最低的75个变量,这样我就得到了包含1000个观察值和25个变量的df 我这样做: newDf = df[, sapply(df, var) > variance] 其中我选择了方差,使得ncol(newDf)==25。但由于某种原因,这并没有给我一个方差最高的新数据框,因为在新数据框中有很多低方差的列,许多高方差的列被删除了。我是不是误解了那一行代码 我还研究了dplyr中的filter(

我有一个包含1000个观察值和100个变量的数据框
df
,我想删除一些变量,更准确地说,我想删除方差最低的75个变量,这样我就得到了包含1000个观察值和25个变量的
df

我这样做:

newDf = df[, sapply(df, var) > variance]
其中我选择了方差,使得
ncol(newDf)==25
。但由于某种原因,这并没有给我一个方差最高的新数据框,因为在新数据框中有很多低方差的列,许多高方差的列被删除了。我是不是误解了那一行代码


我还研究了
dplyr
中的
filter()
函数,但我不能根据其中的列差异进行过滤。

这里是一个模拟您大小的数据帧,以及我如何使用
purr::map\u dbl
解决它

newDF = df[, head(order(sapply(df, var), decreasing = TRUE), 25)]
vardf <- map_dfc(sample(1:100, size = 100), ~ rnorm(1000, 0, .x))
colsd <- map_dbl(vardf, sd)
to_remove <- colsd <= sort(colsd)[75]
newdf <- vardf[, !to_remove]

vardf这是一个模拟您大小的数据帧,以及我如何使用
purr::map\u dbl
解决它

vardf <- map_dfc(sample(1:100, size = 100), ~ rnorm(1000, 0, .x))
colsd <- map_dbl(vardf, sd)
to_remove <- colsd <= sort(colsd)[75]
newdf <- vardf[, !to_remove]

vardf请发布一个可复制的示例。我在一个小示例上尝试了你的代码,效果非常好,以echo@LMc:这看起来应该可以工作,所以a将非常有用。请发布一个可复制的示例。我在一个小示例上尝试了你的代码,效果非常好,以echo@LMc:这看起来应该可以工作,所以a会很有帮助。这确实很有效。然而,newDF现在是基于方差排序的,但我只想删除方差最小的列,并保留原始df中的顺序。有解决方法吗?@Parseval只需按照列在原始DataFrame中出现的顺序匹配这些列,这确实很有效。然而,newDF现在是基于方差排序的,但我只想删除方差最小的列,并保留原始df中的顺序。有解决方法吗?@Parseval只需按照列在原始数据帧中的显示顺序匹配这些列