divide a range of values in bins of equal length: cut vs cut2

后端 未结 3 1821
时光说笑
时光说笑 2020-12-31 07:36

I\'m using the cut function to split my data in equal bins, it does the job but I\'m not happy with the way it returns the values. What I need is the center of the bin not t

3条回答
  •  礼貌的吻别
    2020-12-31 08:03

    We can use smart_cut from package cutr:

    devtools::install_github("moodymudskipper/cutr")
    library(cutr)
    

    Using @Joshua's sample data:

    median by interval (same output as @Joshua except it's an ordered factor) :

    smart_cut(x,3, "n_intervals", labels= ~ median(.))
    # [1] 18 2  18 2  18 18 ...
    # Levels: 2 < 11 < 18
    

    center of each interval (same output as @Aaron except it's an ordered factor) :

    smart_cut(x,3, "n_intervals", labels= ~ mean(.y))
    # [1] 16.67 3.333 16.67 3.333 16.67 16.67 ...
    # Levels: 3.333 < 10 < 16.67
    

    mean of values by interval :

    smart_cut(x,3, "n_intervals", labels= ~ mean(.))
    # [1] 17.48 2.571 17.48 2.571 17.48 17.48 ...
    # Levels: 2.571 < 11.06 < 17.48
    

    labels can be a character vector just like in base::cut.default, but it can also be, as it is here, a function of 2 parameters, the first being the values contained in the bin, and the second the cut points of the bin.

    more on cutr and smart_cut

提交回复
热议问题