【问题标题】:Cut with one specific interval以特定间隔切割
【发布时间】:2020-12-08 23:34:25
【问题描述】:

我有一个数据集,我想使用 cut() 函数(或类似的东西)将它分成 4 个部分。

set.seed(5)
cut(runif(100, 0, 100), 4)

给出等级:(1.35,25.8] (25.8,50.2] (50.2,74.6] (74.6,99])

问题是,我希望一个区间为 (25.8,50] 和另一个 (50,74.6]。实际上,休息可能会有所不同,但这 50 对我来说很重要。如何实现它?

【问题讨论】:

  • 您为什么不手动指定休息时间? breaks 可以是指定所需断点的数字向量。
  • 我将使用各种数据集,其中一些分布可能会有很大差异,这就是我不想使用固定休息时间的原因
  • @jedrekwol 你将如何决定休息时间?你能从数据中知道吗?你能创建一个计算休息时间的函数吗,比如c(min(data), quantile(data, 0.25), 50, quantile(data, 0.75), max(data))
  • 如果您的数据的最小值为 0,最大值为 0f 100,并且您有两个中间区间,您只需找到数据的最小值和最大值。 [min_data, 25.8] 和 [74.6. max_data] 应该是另外两个区间。
  • @allan-cameron 这实际上很好。数据集的偏度可能会有所不同,所以 50 有时会在第一个或最后一个区间,但我可以对其进行排序。

标签: r cut


【解决方案1】:

如果您使用 cut,则 第一次中断必须小于 min(data)。否则,间隔中会有一个 NA。

例如使用分位数,

cut(data, breaks= c(min(data) - diff(range(data)) / 1000,
                                             quantile(data)[2:5]))

另外,您已经知道两个中间区间(25.8 - 50 和 50 - 74.6),然后只需找到数据的最小值和最大值

cut(data, breaks= c(min(data) - diff(range(data)) / 1000, 
                                        25.8, 50, 74.6, max(data)))

【讨论】:

  • 稍微缩放它可能会更好,这就是cut.default 所做的 - 例如min(data) * 0.99 而不是固定的偏移量。
  • @thelatemail 我最初更改为您的建议。然后我意识到如果min(data) 为零,那就有问题了。我认为min(data) - diff(range(data)) / 1000cut.default 所做的。
猜你喜欢
  • 1970-01-01
  • 2011-08-10
  • 2013-02-23
  • 2021-12-27
  • 1970-01-01
  • 2020-10-27
  • 1970-01-01
  • 2021-10-18
  • 2020-02-03
相关资源
最近更新 更多