gpt4 book ai didi

r - 根据存在大小为 n 的间隙的条件将列表拆分为子列表

转载 作者:行者123 更新时间:2023-12-03 23:56:39 24 4
gpt4 key购买 nike

我有一个本质上在增加(即不断增加)的数字列表。

alist <- c(1:20, 50:70, 210:235, 240:250)

从一个数到下一个数的差为 n。

我想根据列表中每个项目之间的差异是否大于 n 的阈值来自动拆分列表。

例如,如果 n > 20 的值,对于上面的特定列表,它应该将自身分成 3 个数据集。

调用 which(diff(alist) >20)告诉我应该在哪里“剪切”数据,但对于我的生活,我无法弄清楚下一步......我可能在这里遗漏了一些非常简单的东西。

理想情况下,结果应该成为列表列表或表格(我也不介意):
[[1]]
[1] 1 2 3 4 5 6 7 8 9 0 11 12 13 14 15 16 17 18 19 20

[[2]]
[1] 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65...

[[3]]
[1] 210 211 212 213...

最佳答案

我们可以使用 cumsum在逻辑上 vectorsplit 创建组婷

unname(split(alist, cumsum(c(TRUE, diff(alist) > 20))))
#[[1]]
# [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20

#[[2]]
# [1] 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70

#[[3]]
# [1] 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 240 241 242 243 244 245 246 247 248
# [36] 249 250

如果我们需要使用 which方法,
i1 <- which(diff(alist) >20)
Map(function(i,j) alist[i:j], c(1, i1 +1), c(i1, length(alist)))

关于r - 根据存在大小为 n 的间隙的条件将列表拆分为子列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45162932/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com