首页 > 解决方案 > 在 R 中捕获字符向量的“内部切片”

问题描述

我有一个字符向量,如下所示:

test <- c(1, 7, 13, 19, 25, 31, 37)

我想返回中间的数字,如下所示:

"2:6"   "8:12"  "14:18" "20:24" "26:30" "32:36"

我成功地做到了,但它并不像我希望的那样健壮:

rangefunc <- function(x){
  paste(x+1, x+5, sep = ":")
}
head(sapply(test, rangefunc))

显然,这是一个可行的解决方案,但对于数字之间的间隔在整个过程中不一致(例如,始终为 6)或间隔只是不同(即,不是 6)的情况,它不是面向未来的。为了处理我的字符向量中的这种潜在情况,我test如何构造一个比以下更强大的函数:

rangefunc <- function(x){
  paste(x+1, x+5, sep = ":")
}

标签: r

解决方案


paste(head(test, -1) + 1, tail(test, -1) - 1, sep = ':')
# [1] "2:6"   "8:12"  "14:18" "20:24" "26:30" "32:36"

看起来这个输出可能不是很有用(取决于你为什么想要它)。你可能想要这样的东西

data.frame(start = head(test, -1) + 1
           , end = tail(test, -1) - 1)

#   start end
# 1     2   6
# 2     8  12
# 3    14  18
# 4    20  24
# 5    26  30
# 6    32  36

推荐阅读