【问题标题】:Find equal width intervals and intervals mean找到等宽间隔和间隔均值
【发布时间】:2017-05-26 12:17:30
【问题描述】:

我有一个数据集(kl):

Actual
4096
-1149
13780
744
-461
9660
619
3466
0
7675
10446
12452
10813
11637
-1908
0
7441
11981
5389
4717

然后我应用 classInt 包具有相等的宽度间隔:

library(classInt)

y = classIntervals(kl$Actual, 6, style = 'quantile')

y
style: quantile
          [-1908,0)        [0,1651.333)     [1651.333,5053)     [5053,8998.333) 
              3                   4                   3                   3 
[8998.333,11499.67)    [11499.67,13780] 
              3                   4 

然后我必须存储这些间隔以便与实际匹配,即每个数字都位于哪个间隔内。示例:4096 位于 (1651.333,5053) 内。

然后我想在单独的列中获得间隔的平均值,即 Interval_Mean。示例:(1651.333 + 5053)/2 = 3352.17。

现在我想要新的数据帧 (nm) 为:

nm
Actual  Interval            Interval_Mean
4096    1651.333,5053        3352.17
-1149   -1908,0              -954.00
13780   11499.67,13780       12639.84
744     0,1651.333           825.67
-461    -1908,0             -954.00
9660    8998.333,11499.67    10249.00
619      0,1651.333          825.67
3466    1651.333,5053        3352.17
0        0,1651.333          825.67
7675    5053.00,8998.333     7025.67
10446   8998.333,11499.67    10249.00
12452   11499.67,13780       12639.84
10813   8998.333,11499.67    10249.00
11637   11499.67,13780       12639.84
-1908      -1908,0           -954.00
0           0,1651.333       825.67
7441    5053.00,8998.333     7025.67
11981   11499.67,13780       12639.84
5389    5053.00,8998.333     7025.67
4717    1651.333,5053        3352.17

其中,Interval 是上述 y 与 Actual 值对齐的 o/p,Interval_Mean 是每个间隔的平均值。

感谢您提供解决方案。

【问题讨论】:

  • 您可以在答案中添加您所做的一些试验。
  • 最大计数为n 的间隔数将是ceiling(length(kl$Actual)/n)

标签: r


【解决方案1】:

在尝试了各种技术后,我最终得到了解决方案:

z = unique(y$brks)

kl$interval = cut(kl$Actual, breaks = z, right = FALSE )

kl$interval = gsub("\\[|\\)", "", kl$interval)

intmean = within(kl, interval<-data.frame(do.call('rbind', strsplit(as.character(interval), ',', fixed=TRUE))))

intmean = intmean[,-1]

str(intmean)

intmean[sapply(intmean, is.factor)] <- lapply(intmean[sapply(intmean, is.factor)], function(x) as.numeric(as.character(x)))

intmean$interval_mean = apply(intmean, 1,mean)

nm = kl

nm$Interval_Mean = intmean$interval_mean

我们找到了解决方案。谢谢!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-03
    • 1970-01-01
    • 2014-08-22
    • 2018-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多