gpt4 book ai didi

R:检测序列

转载 作者:行者123 更新时间:2023-12-04 11:39:33 25 4
gpt4 key购买 nike

假设我有一个数字向量,其中有些数字是按顺序排列的,有些则不是:

x <- c(1,2,3,5,6,7,8,11,14,16,17)

我将如何操作它以便返回一个字符串,以便将序列组合在一起?

y <- "1-3, 5-8, 11, 14, 16-17"

最佳答案

我们通过使用 diff 比较相邻元素来创建分组变量 ('gr'),检查不为 1 的输出,执行 cumsum。我们在 tapply 中使用它来 paste 'x' 中元素的 range

gr <- cumsum(c(TRUE,diff(x)!=1))
y <- unname(tapply(x, gr, FUN= function(.x)
paste(unique(range(.x)), collapse='-')))

如果我们需要单个字符串,请使用 toString 将“y”粘贴 在一起,它是 paste(..., collapse=', ')

y <- toString(y)
y
#[1] "1-3, 5-8, 11, 14, 16-17"

我们也可以使用任何按组聚合的方法来做到这一点。例如,使用 data.table,我们将 'x' 转换为 'data.table',按 'gr' 分组(使用 cumsum(...) 创建),我们将元素粘贴在一起,并像以前一样使用toString

library(data.table)
y1 <- setDT(list(x))[,paste(unique(range(V1)), collapse='-') ,
by = .(cumsum(c(TRUE, diff(V1)!=1)))]$V1
toString(y1)
#[1] "1-3, 5-8, 11, 14, 16-17"

关于R:检测序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32419637/

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