我正在尝试使用strsplit
重命名列表中的某些项目。具体来说,我想排除第一个元素,然后将其余的元素折叠在一起。我遇到的主要问题是字符串的长度不尽相同。
假人组:
dumb <- c(
"title_use",
"title_use_full",
"title_use_full_info"
)
sapply(strsplit(dumb, "_"), head, -1)
显然,这无法按预期进行。有没有一种方法可以排除第一个元素,而无需知道将分解成多少个块?
答案 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)