没有第一个元素的字符串拆分

时间:2019-09-06 01:29:06

标签: r string

我正在尝试使用strsplit重命名列表中的某些项目。具体来说,我想排除第一个元素,然后将其余的元素折叠在一起。我遇到的主要问题是字符串的长度不尽相同。

假人组:

dumb <- c(
  "title_use",
  "title_use_full",
  "title_use_full_info"
)

sapply(strsplit(dumb, "_"), head, -1)

显然,这无法按预期进行。有没有一种方法可以排除第一个元素,而无需知道将分解成多少个块?

2 个答案:

答案 0 :(得分:1)

regexpr将给出第一个_的位置,然后substring可以将dumb从该位置到nchar给出的末尾子集。 substring已向量化,因此无需循环。

substring(dumb, regexpr("_", dumb) + 1, nchar(dumb))
#[1] "use"           "use_full"      "use_full_info"

答案 1 :(得分:0)

您可以使用tail而不是head排除第一部分并粘贴其余部分

sapply(strsplit(dumb, "_"),function(x) paste0(tail(x, -1), collapse = "_"))
#[1] "use"           "use_full"      "use_full_info"

但是,您不需要拆分字符串,可以使用sub删除所有内容,直到第一个下划线。

sub(".*?_", "", dumb)
#[1] "use"           "use_full"      "use_full_info"

或者反过来做,在第一个下划线之后提取所有内容

sub(".*?_(.*)", "\\1", dumb)