【问题标题】:Can we create a subset of factor variables with nlevels more than a value in R? [duplicate]我们可以创建一个因子变量的子集,其 nlevels 超过 R 中的一个值吗? [复制]
【发布时间】:2018-04-27 13:36:34
【问题描述】:

我正在尝试对一组变量运行随机森林。大多数变量是分类的(因子),有些变量有很多值。我的数据集有大约 1500 个变量,我想删除那些超过 50 个类别的变量。

在 R 中可以做到这一点吗?

编辑:我一直在尝试对此进行编码:

如果变量是因子,则计算 nlevels 的数量。如果 nlevels >50,则丢弃。

【问题讨论】:

  • 当然可行。您需要首先计算每个(分类)变量的唯一值的数量,然后删除那些值超过阈值的变量。尽管在不知道您的数据结构的情况下很难给出一个确切的示例。

标签: r machine-learning filtering random-forest r-factor


【解决方案1】:

您可以尝试使用函数nlevels 来检索每列的级别数。这是一个使用 mtcars 的示例,其中所有列都转换为因子,并且我们只保留少于 10 个级别的因子。

require(dplyr)

df <- as.data.frame(sapply(mtcars, as.factor))

good.columns <- names(df)[sapply(df, nlevels) < 10]

filtered.df <- df %>% select(good.columns)

注意:在您的情况下,它也适用于非因子列,因为非因子列的级别数等于 0。

【讨论】:

    【解决方案2】:

    我们可以使用select_if

    library(dplyr)
    data(mtcars)
    mtcars %>%
          mutate_all(factor) %>% # just to change all columns to `factor` for testing
          select_if(~nlevels(.)  < 10)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多