在 R 中缩短长向量

Shortening a long vector in R

提问人:Simon Harmel 提问时间:1/2/2022 最后编辑:Wiktor StribiżewSimon Harmel 更新时间:1/2/2022 访问量:206

问:

向量,可以在 Base R 中使用缩短,从而产生以abtoString(width = 10)....

但是,我想知道如何使缩短的向量以 ?..., last vector element

我的如下所示。desired_output

a <- 1:26
b <- LETTERS  

toString(a, width = 10)
# [1] "1,2,...."
desired_output1 = "1,2,...,26"

toString(b, width = 10)
# [1] "A,B,...."
desired_output2 = "A,B,...,Z"

r 字符串 向量

评论

0赞 Chris 1/2/2022
为了将来的清晰度,用例是什么?

答:

3赞 akrun 1/2/2022 #1

应用 后,我们可以使用将子字符串删除到toStringsubformat

f1 <- function(vec, n = 2) { 
   
    gsub("\\s+", "", 
     sub(sprintf("^(([^,]+, ){%s}).*, ([^,]+)$", n), "\\1...,\\3", toString(vec)))

}

-测试

> f1(a)
[1] "1,2,...,26"
> f1(b)
[1] "A,B,...,Z"
> f1(a, 3)
[1] "1,2,3,...,26"
> f1(b, 3)
[1] "A,B,C,...,Z"
> f1(a, 4)
[1] "1,2,3,4,...,26"
> f1(b, 4)
[1] "A,B,C,D,...,Z"

评论

0赞 akrun 1/3/2022
@SimonHarmel看起来已经回答了
0赞 Simon Harmel 1/21/2022
一个有趣的问题
6赞 G5W 1/2/2022 #2

你可以把结尾加进去。

paste(toString(a, width = 10), a[length(a)], sep=", ")  
[1] "1, 2, ...., 26"
paste(toString(b, width = 10), b[length(b)], sep=", ")  
[1] "A, B, ...., Z"
2赞 TarJae 1/2/2022 #3

我们可以这样做: 创建一个函数,将向量的前两个元素和最后一个元素额外化,并将它们粘贴在一起:

my_func <- function(x) {
  a <- paste(x[1:2], collapse=",")
  b <- tail(x, n=1)
  paste0(a,",...,",b)
}

my_func(a)
[1] "1,2,...,26"

my_func(b)
[1] "A,B,...,Z"
1赞 jpdugo17 1/2/2022 #4
library(stringr)

a <- 1:26
b <- LETTERS  


reduce_string <- function(x, n_show) {
    
    str_c(x[1:n_show], collapse = ',') %>% 
        str_c('....,', x[[length(x)]])
    
}

reduce_string(a, 2)
#> [1] "1,2....,26"

创建于 2022-01-02 由 reprex 软件包 (v2.0.1)