【发布时间】:2021-12-19 22:24:42
【问题描述】:
我想根据字符串第一次出现的索引将向量的元素粘贴/折叠在一起,直到它再次出现。例如,
v <- c("foo", "bar1", "bar2", "foo", "bar1", "foo", "bar1", "bar2", "bar3", "foo")
v
[1] "foo" "bar1" "bar2" "foo" "bar1" "foo" "bar1" "bar2" "bar3" "foo"
我可以这样做
c(paste0(v[1:3], collapse = ""), paste0(v[4:5], collapse = ""), paste0(v[6:9], collapse = ""), paste0(v[10:10], collapse = ""))
[1] "foobar1bar2" "foobar1" "foobar1bar2bar3" "foo"
模式总是“foo”,但是 foo 之后的元素数量总是会改变(就像这个例子一样,它是 2、1、3、0)。有很多行,所以我宁愿避免循环。我想我可以使用
b <- which(v == "foo")
b
[1] 1 4 6 10
sapply(1:(length(b)-1), function(x) paste0(v[b[x]:(b[x+1]-1)], collapse = ""))
[1] "foobar1bar2" "foobar1" "foobar1bar2bar3"
我想念最后一个“foo”。任何帮助将不胜感激!
【问题讨论】: