代码之家  ›  专栏  ›  技术社区  ›  D1X

对数据进行分类并分配新数据

r
  •  1
  • D1X  · 技术社区  · 9 年前

    我正在处理数据,我特别希望使用间隔对其进行分类。

    cut

    data <- seq(1, 10)
    cut(data, 2)
    >> [1] (0.991,5.5] (0.991,5.5] (0.991,5.5] (0.991,5.5] (0.991,5.5] (5.5,10]    (5.5,10]    (5.5,10]    (5.5,10]    (5.5,10]
    Levels: (0.991,5.5] (5.5,10]
    

    以两个间隔对数据进行分类。处理是更复杂问题的一部分,最终需要将新数据分配给自动生成的间隔。

    最有效的方法是什么?因为尝试阅读 levels()

    1 回复  |  直到 9 年前
        1
  •  1
  •   Kelli-Jean    9 年前

    下面是使用base R的快速方法:

    # Find intervals use original data
    labs = levels(cut(data, 2))
    labs_df = cbind(lower = as.numeric( sub("\\((.+),.*", "\\1", labs) ),
          upper = as.numeric( sub("[^,]*,([^]]*)\\]", "\\1", labs) ))
    
    # Find intervals on new data
    data_new = sample(1:10)
    interval_idx = findInterval(data_new, labs_df[,1])
    interval_idx
    
    interval = labs[interval_idx]
    
    data.frame(data_new, interval_idx, interval)