【问题标题】:Subset data frame by factor cardinality?按因子基数划分数据帧?
【发布时间】:2020-05-03 19:53:55
【问题描述】:

我怀疑这将是重复的,但我寻找答案的努力失败了。假设我有一个数据框,其中的列完全由整数或因子组成。其中一些列具有许多级别的因子,而有些则没有。假设我想选择部分数据或以其他方式对数据进行子集化,以便我只获得具有少于 10 个级别的因子的列。我怎样才能做到这一点?我的第一个想法是做一个特别讨厌的sapply 命令,但我希望有更好的方法。

【问题讨论】:

    标签: r dataframe r-factor


    【解决方案1】:

    我们可以使用select_if

    library(dplyr) 
    df1 %>%
        select_if(~ is.factor(.) && nlevels(.) < 10)
    

    通过使用iris的可重现示例

    data(iris)
    iris %>%
           select_if(~ is.factor(.) && nlevels(.) < 10)
    

    或使用sapply

    i1 <- sapply(df1, function(x) is.factor(x) && nlevels(x) < 10)
    df1[i1]
    

    【讨论】:

      【解决方案2】:

      使用data.table,您可以:

      library(data.table)
      setDT(df)
      df[,.SD, .SDcols = sapply(df, function(x) length(levels(x))<10)]
      

      示例:

      df <- data.table(x = factor(1:3, levels = 1:5), y = factor(1:3, levels = 1:10))
      df[,.SD, .SDcols = sapply(df, function(x) length(levels(x))>5)]
       y
      1: 1
      2: 2
      3: 3
      

      【讨论】:

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