【问题标题】:Grouping a sequence of monotonically increasing integers based on a difference that resets [duplicate]根据重置的差异对单调递增的整数序列进行分组[重复]
【发布时间】:2016-11-19 12:56:37
【问题描述】:

考虑一个单调递增的整数序列,例如:

x <- c(0, 3, 5, 8, 10, 16, 18, 35, 36)

我想根据它们之间的差异对它们进行分组。如果差异小于或等于4,我希望他们在同一个组中——但是一旦分配了一个组,就需要重置差异。

#    x desired_group
# 1  0             0
# 2  3             0
# 3  5             1
# 4  8             1
# 5 10             2
# 6 16             3
# 7 18             3
# 8 35             4
# 9 36             4

{0, 3} 放在一起,因为它们在 4 以内。一旦达到 5,该分组就需要重置。也就是说,floor(x / 4) 将不起作用,因为它没有适当地“重置”。

【问题讨论】:

  • 你能测试一下v1 &lt;- x %/% 5;match(v1, unique(v1))-1#[1] 0 0 1 1 2 3 3 4 4
  • 如果你有x &lt;- c(0, 3, 5, 8, 10, 16, 18, 35, 36, 789, 22)怎么办
  • 哦,好的。没问题@akrun
  • @JasonAizkalns 找到了!我没有将其发布为答案,因为我知道我在其他地方看到了它...here you go... 最后我在该帖子上也有rleid 答案
  • @akrun 尝试澄清问题here

标签: r grouping sequence


【解决方案1】:

我们可以试试

v1 <- x %/% 5
match(v1, unique(v1))-1
#[1] 0 0 1 1 2 3 3 4 4

【讨论】:

  • 在尝试将想法扩展到 240 组时失败:x &lt;- c(0, 4779, 4796, 4816, 24939, 26436, 26476, 45062, 242405, 242423, 242433, 242458) -- 使用 v1 &lt;- x %/% 241。看看:x[12] - x[9],然后类似地,尝试更改为 60 人一组,x[4] - x[2] 变得有问题。
猜你喜欢
  • 1970-01-01
  • 2014-09-03
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
  • 2015-05-01
  • 1970-01-01
  • 2021-04-23
  • 2019-11-20
相关资源
最近更新 更多