我在一个列表中有一些数据,我需要寻找连续运行的整数(我的大脑认为rle
,但不知道如何在这里使用它)。
这样更容易查看数据集并解释我的目的。
数据视图如下:
$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
使用基本包我怎么能用最高和最低之间的冒号和非连续部分之间的逗号来替换连续跨度?注意,数据从整数向量列表到字符向量列表。
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"))
6条答案
按热度按时间pgky5nke1#
我认为
diff
是解决方案。您可能需要一些额外的操作来处理单例,但是:dohp0rv52#
使用
IRanges
:ds97pgxw3#
以下是使用
diff
和tapply
返回字符向量的尝试disbfnqx4#
我有一个相当类似的解决方案马里乌斯,他的作品以及我的,但机制略有不同,所以我想我不妨张贴它:
它产生:
vom3gejh5#
lapply
和tapply
的另一个简短解决方案:结果是:
ccgok5k56#
迟到了,但这里有一个基于
deparse
的一行程序: