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