【问题标题】:Identifying continuous and categorical data using data.table使用 data.table 识别连续和分类数据
【发布时间】:2018-10-27 16:00:07
【问题描述】:
DATA = data.table(col1 = rbinom(10,10,.5),
                  col2 = rnorm(10),
                  col3 = rbinom(10,1,.5),
                  col4 = rbinom(10,10,.5),
                  col5 = rbinom(10,1,.5))

我有一个大型数据集,其中连续变量属于integernumeric 类,分类变量属于integer 类。因此,我正在寻找其他规则来区分连续变量和分类变量。如表中所示,所有分类变量均为0-1

由于数据集很大,我更喜欢使用data.table 包。

【问题讨论】:

  • 您预期的 otuput 是什么意思?只是为了让人类进一步探索数据或自动处理需要准确的分类变量名称?
  • 它是针对自动处理的。
  • 请将预期结果添加到您的问题中(例如,您是否希望有两个带有列名的向量)以帮助我们给出准确的答案。 THX :-)

标签: r data.table


【解决方案1】:

你可以这样做:

apply(DATA, 2, function(x) ifelse(all(x %in% 0:1), 1, 0))

或者:

apply(DATA, 2, function(x) all(x %in% 0:1))

【讨论】:

    【解决方案2】:

    我想提出一个更通用的解决方案:

    为什么?如果分类列中有脏数据(例如值 > 1)会怎样?

    如果您的数据集足够大,您可以尝试将 (table) 每一列制成表格并计算不同的值。较少的不同值是分类变量的一个很好的指标:

    library(data.table)
    
    set.seed(123)
    
    size = 1000
    
    data = data.table(
      col1 = rbinom(size, 10, .5),
      col2 = rnorm(size),
      col3 = rbinom(size, 1, .5),
      col4 = rbinom(size, 10, .5),
      col5 = rbinom(size, 1, .5)
    )
    
    lapply(data, function(x) length(table(x)))
    # $col1
    # [1] 11
    # 
    # $col2
    # [1] 1000
    # 
    # $col3
    # [1] 2
    # 
    # $col4
    # [1] 11
    # 
    # $col5
    # [1] 2
    

    这里 col2 很可能是连续的,所有其他列似乎都是分类的。

    您可以使用绝对(不同值的最大数量)或相对(不同值的数量除以观察/行数)值将结果拆分为连续和分类...

    如果还想知道您可以使用的每列的最小值和最大值:

    lapply(data, function(x) c(distincts = length(table(x)), min = min(x), msx = max(x) ))
    

    得到

    $col1
    distincts       min       msx 
           11         0        10 
    
    $col2
      distincts         min         msx 
    1000.000000   -2.809775    3.390371 
    
    $col3
    distincts       min       msx 
            2         0         1 
    
    $col4
    distincts       min       msx 
           11         0        10 
    
    $col5
    distincts       min       msx 
            2         0         1 
    

    【讨论】:

    • 非常感谢您的建议,确实获得更通用的解决方案会派上用场。然而,这种方法在我的情况下失败了,例如我有一个变量通知手机的数量,并且不同值的总数为 5,这小于某些分类变量的级别数。
    猜你喜欢
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-25
    • 2016-03-19
    • 2023-04-06
    • 2022-11-15
    • 2015-05-14
    相关资源
    最近更新 更多