Разделить символьный вектор на элемент в R? - PullRequest
2 голосов
/ 21 апреля 2019

Учитывая вектор:

c("kuku", "pupu", "lilu","","ff","rrrr", "", "rrr")

Как я могу разделить его на ""?

Чтобы получить 3 вектора:

c("kuku", "pupu", "lilu")
c("ff","rrrr")
c("rrr")

1 Ответ

6 голосов
/ 21 апреля 2019

Мы можем получить совокупную сумму логического вектора для создания индекса группировки для split

i1 <- v1 == ""
i1
#[1] FALSE FALSE FALSE  TRUE FALSE FALSE  TRUE FALSE


grp <- cumsum(i1)
grp
#[1] 0 0 0 1 1 1 2 2

Обратите внимание, что при накопленной сумме добавляется 1 при каждом значении TRUE Затем мы делаем подмножество вектора, чтобы не включать "". Отрицая (!), ИСТИНА становится ЛОЖНОЙ и ЛОЖЬ -> ИСТИНА.

v1[!i1]
#[1] "kuku" "pupu" "lilu" "ff"   "rrrr" "rrr" 

Аналогично, подгруппа 'grp' также поднастроена, так как мы хотим, чтобы оба вектора имели одинаковую длину и выполняли split

split(v1[!i1], grp[!i1])
#$`0`
#[1] "kuku" "pupu" "lilu"

#$`1`
#[1] "ff"   "rrrr"

#$`2`
#[1] "rrr"
...