LEAPS包允许识别子集,并可以返回最佳子集的结果.例如:

library(leaps)
mtcars.regsubsets <- regsubsets(mpg ~ ., data = mtcars)
summary(mtcars.regsubsets, nvmax = 10)
Selection 算法rithm: exhaustive
         cyl disp hp  drat wt  qsec vs  am  gear carb
1  ( 1 ) " " " "  " " " "  "*" " "  " " " " " "  " " 
2  ( 1 ) "*" " "  " " " "  "*" " "  " " " " " "  " " 
3  ( 1 ) " " " "  " " " "  "*" "*"  " " "*" " "  " " 
4  ( 1 ) " " " "  "*" " "  "*" "*"  " " "*" " "  " " 
5  ( 1 ) " " "*"  "*" " "  "*" "*"  " " "*" " "  " " 
6  ( 1 ) " " "*"  "*" "*"  "*" "*"  " " "*" " "  " " 
7  ( 1 ) " " "*"  "*" "*"  "*" "*"  " " "*" "*"  " " 
8  ( 1 ) " " "*"  "*" "*"  "*" "*"  " " "*" "*"  "*" 

摘要中的"*"表示列数的最佳结果.也可以使用特定的测量方法,例如Mlow的CP来找到最佳结果:

which.min(summary(mtcars.regsubsets)$cp)

3

这返回了一个结论,即3个变量集合的Mlow‘s CP得分最低.

有没有一种方法可以自动 Select 数据集中的那些列(在本例中为wt、sec和am),以便它只返回包含这三列的新数据集?

mtcars[,c(5,6,8)]

显然,已经判断了LEAPS包的帮助文件,查看了StackOverflow和其他来源,但没有找到解决方案.

推荐答案

以下是使用dplyr的一种方法:

library(leaps)
library(dplyr)
mtcars.regsubsets <- regsubsets(mpg ~ ., data = mtcars)

cols_sel <- mtcars.regsubsets |> 
  broom::tidy() |> 
  filter(mallows_cp == min(mallows_cp)) |> 
  select(where(~.x == TRUE)) |> 
  colnames()

select(mtcars, any_of(cols_sel))

R相关问答推荐

高质量地将R格式的图表从Word中输出

将Multilinetring合并到一个线串中,使用sf生成规则间隔的点

为什么以及如何修复Mapview不显示所有点并且st_buffer合并一些区域R?

名称输出pmap on tible

如何按排序顺序打印一个框架中所有精确的唯一值?

如何使用R对每组变量进行随机化?

从圆到R中的多边形的标绘雷达图

R -使用矩阵reshape 列表

如何移除GGPlot中超出与面相交的任何格网像元

R+reprex:在呈现R标记文件时创建可重现的示例

如何在ggplot2中创建多个y轴(每个变量一个)

ggplot R:X,Y,Z使用固定/等距的X,Y坐标绘制六边形热图

按组和连续id计算日期差

通过R:文件名未正确写入[已解决]将.nc文件转换和导出为.tif文件

R预测包如何处理ARIMA(Auto.arima函数)中的缺失值

将数据从一列转换为按组累计计数的单个虚拟变量

如何在R中的两列以上使用联合(&U)?

reshape 数据帧-基于组将行转换为列

使用nls()函数的非线性模型的半正态图

如果y中存在x中的值,则将y行中的多个值复制到相应的x行中