gpt4 book ai didi

r - 折叠连续整数到范围的字符串

转载 作者:行者123 更新时间:2023-12-03 12:10:02 25 4
gpt4 key购买 nike

我在列表中有一些数据,我需要这些数据来寻找连续的整数(我的大脑认为rle,但是在这里不知道如何使用它)。

查看数据集并解释我要做什么会更容易。

这是数据 View :

$greg
[1] 7 8 9 10 11 20 21 22 23 24 30 31 32 33 49

$researcher
[1] 42 43 44 45 46 47 48

$sally
[1] 25 26 27 28 29 37 38 39 40 41

$sam
[1] 1 2 3 4 5 6 16 17 18 19 34 35 36

$teacher
[1] 12 13 14 15

所需的输出:
$greg
[1] 7:11, 20:24, 30:33, 49

$researcher
[1] 42:48

$sally
[1] 25:29, 37:41

$sam
[1] 1:6, 16:19 34:36

$teacher
[1] 12:15

使用基本软件包如何将连续跨度替换为最高和最低之间的冒号以及非连续部分之间的逗号?请注意,数据从整数 vector 列表到字符 vector 列表。

MWE数据:
z <- structure(list(greg = c(7L, 8L, 9L, 10L, 11L, 20L, 21L, 22L, 
23L, 24L, 30L, 31L, 32L, 33L, 49L), researcher = 42:48, sally = c(25L,
26L, 27L, 28L, 29L, 37L, 38L, 39L, 40L, 41L), sam = c(1L, 2L,
3L, 4L, 5L, 6L, 16L, 17L, 18L, 19L, 34L, 35L, 36L), teacher = 12:15), .Names = c("greg",
"researcher", "sally", "sam", "teacher"))

最佳答案

我认为diff是解决方案。您可能需要一些额外的摆弄来处理单例,但是:

lapply(z, function(x) {
diffs <- c(1, diff(x))
start_indexes <- c(1, which(diffs > 1))
end_indexes <- c(start_indexes - 1, length(x))
coloned <- paste(x[start_indexes], x[end_indexes], sep=":")
paste0(coloned, collapse=", ")
})

$greg
[1] "7:11, 20:24, 30:33, 49:49"

$researcher
[1] "42:48"

$sally
[1] "25:29, 37:41"

$sam
[1] "1:6, 16:19, 34:36"

$teacher
[1] "12:15"

关于r - 折叠连续整数到范围的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14868406/

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