3
假設我有數的向量,其具有一些數字是在序列和一些不:R:檢測序列
x <- c(1,2,3,5,6,7,8,11,14,16,17)
如何將操縱這使得字符串返回,使得序列分組在一起?
y <- "1-3, 5-8, 11, 14, 16-17"
假設我有數的向量,其具有一些數字是在序列和一些不:R:檢測序列
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='-')))
如果我們需要一個字符串,paste
的「Y」在一起使用toString
這是paste(..., collapse=', ')
y <- toString(y)
y
#[1] "1-3, 5-8, 11, 14, 16-17"
我們也可以做到這一點使用任何骨料按組包裝方法。例如,使用data.table
,我們將「x」至「data.table」,由「GR」(使用cumsum(...)
創建)分組,我們paste
的元件一起,並且如之前使用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"