我有一个排序向量:
c(1, 10, 31, 80, 100, 120, 160)
我想按范围将其元素分成几组,在本例中我将其设置为 31。结果是这样的:
[[1]] 1, 10, 31
[[2]] 80, 100
[[3]] 100, 120
[[4]] 160
每组中的范围小于31。我尝试了一个循环,但我不喜欢它。另外,我尝试了 outer
函数,我计算了所有成对差异:res <- outer(vec, vec, "-")
然后按条件 > 0
过滤每一列和 < 31
.apply(res, 2, function(x) x[x > 0 & x < 31])
虽然结果还不够好...
最佳答案
我认为这将有助于您的目的 终于
第一个列表将提取满足范围条件的项目,而 final_list 将删除实际包含在其他一些项目中的项目。
vec <- c(1, 10, 31, 80, 100, 120, 160)
first_list <- unique(apply(outer(vec, vec, "-"), 1, function(x){vec[(x < 31 & x >= 0)] }))
final_list <- first_list[!sapply(seq_along(first_list), function(i) max(sapply(first_list[-i],function(L) all(first_list[[i]] %in% L))))]
> final_list
[[1]]
[1] 1 10 31
[[2]]
[1] 80 100
[[3]]
[1] 100 120
[[4]]
[1] 160
关于r - 按范围对数字向量进行分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66220486/