我有一个数字列表,其性质正在增加(即不断增加)。
alist <- c(1:20, 50:70, 210:235, 240:250)
从一个数字到下一个数字的差异是 n 。
我想根据列表中每个项目之间的差异是否大于 n 的阈值来自动拆分列表。
例如,如果 n 的值> 20,对于上面的特定列表,它应该分成3个数据集。
致电which(diff(alist) >20)
告诉我应该在哪里&#34;切断&#34;数据上升,但对于我的生活,我无法弄清楚下一步......我可能会在这里错过一些非常简单的事情。
理想情况下,结果应该成为列表或表格(我也不介意):
[[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...
答案 0 :(得分:2)
我们可以在逻辑cumsum
上使用vector
为split
ting
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)))