如何将binned interval作为列

时间:2017-06-12 10:41:09

标签: r

我有一个如下数据框,我可以使用以下代码获取分箱列

df$bins<- cut(df$Col_1, breaks = c(0, seq(0.1, 25, by = 5)), labels = 0:4)

Date         Name   Col_1    Bins   
05-11-2016      B       1       1
05-11-2016      B       2       1
05-11-2016      B       3       1
05-11-2016      B       4       1
05-11-2016      B       5       1
05-11-2016      B       6       2
05-11-2016      B       7       2
05-11-2016      B       8       2
05-11-2016      B       9       2
05-11-2016      B       10      2
05-11-2016      B       11      3
05-11-2016      A       12      3
05-11-2016      A       16      4

现在如何获取分箱间隔和min_bin和max_bin如下

Date.Time   Name    Col_1   Binn_claculated  Binn_interval  min_bin max_bin  
05-11-2016      B       1                 1           -1,5        1       5
05-11-2016      B       2                 1           -1,5        1       5
05-11-2016      B       3                 1           -1,5        1       5
05-11-2016      B       4                 1           -1,5        1       5
05-11-2016      B       5                 1           -1,5        1       5
05-11-2016      B       6                 2           -6,1        6      10
05-11-2016      B       7                 2           -6,1        6      10
05-11-2016      B       8                 2           -6,1        6      10
05-11-2016      B       9                 2           -6,1        6      10
05-11-2016      B       10                2           -6,1        6      10
05-11-2016      B       11                3           -11,15     11      15
05-11-2016      A       12                3           -11,15     11      15
05-11-2016      A       16                4           -16,2      16      20

提前致谢

1 个答案:

答案 0 :(得分:1)

从你得到的,你可以做到

funs <- setNames(list(min, max), c("min", "max"))
df <- cbind(df, lapply(funs, function(f) ave(df$Col_1, df$bins, FUN = f)))

并添加间隔(原文如此),您可以这样做:

df$interval <- with(df, sprintf('(%s,%s)', min, max))
df
#          Date Name Col_1 bins min max interval
# 1  05-11-2016    B     1    1   1   5    (1,5)
# 2  05-11-2016    B     2    1   1   5    (1,5)
# 3  05-11-2016    B     3    1   1   5    (1,5)
# 4  05-11-2016    B     4    1   1   5    (1,5)
# 5  05-11-2016    B     5    1   1   5    (1,5)
# 6  05-11-2016    B     6    2   6  10   (6,10)
# 7  05-11-2016    B     7    2   6  10   (6,10)
# 8  05-11-2016    B     8    2   6  10   (6,10)
# 9  05-11-2016    B     9    2   6  10   (6,10)
# 10 05-11-2016    B    10    2   6  10   (6,10)
# 11 05-11-2016    B    11    3  11  12  (11,12)
# 12 05-11-2016    A    12    3  11  12  (11,12)
# 13 05-11-2016    A    16    4  16  16  (16,16)