我想根據字串第一次出現的索引將向量的元素粘貼/折疊在一起,直到它再次出現。例如,
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”。任何幫助將不勝感激!
uj5u.com熱心網友回復:
這個怎么樣
sapply(split(v, cumsum(v=='foo')), paste0, collapse='')
uj5u.com熱心網友回復:
我認為你只需要處理最后一個“foo”:
v <- c("foo", "bar1", "bar2", "foo", "bar1", "foo", "bar1", "bar2", "bar3", "foo")
b <- which(v == "foo")
sapply(seq_along(b),
function(i) {
if (i < length(b)) {
paste(v[b[i]:(b[i 1] - 1)], collapse = "")
} else {
v[b[i]]
}
}
)
這回傳
#> [1] "foobar1bar2" "foobar1" "foobar1bar2bar3" "foo"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/350434.html
下一篇:R如何計算PCA橢圓?
